Java加密/解密之对称加密

对称加密:

发送方:将明文和密钥一起经过加密算法处理生成密文,然后发送给出去。

解密方:接收到密文后,使用加密密钥和相同算法的逆算法进行机密,恢复为明文。

双方使用的密钥必须相同,否则无法正确解密。

常见的几种对称算法:DES(Data Encryption Standard—数据加密标准,使用了56位的密钥)、3DES(经过3重DES加密的算法,使用3组56位密钥对数据进行3次加密,是DES的增强版)、AES(Advanced Encryption Standard—高级加密标准,设计有3个密钥长度128、192、256位,128位的AES比DES安全)。

 

DES算法示例代码:

3DES实现上程序结构与DES一致,只需要将算法名称改为DESede即可。

AES程序结构与DES一致,算法名称改为AES即可。

package com.security.example.example2;

 

import java.security.InvalidKeyException;

import java.security.NoSuchAlgorithmException;

 

import javax.crypto.BadPaddingException;

import javax.crypto.Cipher;

import javax.crypto.IllegalBlockSizeException;

import javax.crypto.KeyGenerator;

import javax.crypto.NoSuchPaddingException;

import javax.crypto.SecretKey;

 

import org.apache.log4j.Logger;

 

/**

* 对称加密。

* 过程:发送方将明文和加密密钥一起经过加密算法处理变成密文,发送给解密方。

* 解密方接收到密文后,使用加密密钥和相同算法的逆算法对密文进行解密,恢复为明文。

* 双方使用的密钥相同。加密时使用什么密钥,解密时必须使用相同的密钥,否则无法解密。

* 对于相同的明文,不同的密钥加密和解密的结果不同。

* @author lucky star

*

*/

public class DesCipher {

private static Logger logger = Logger.getLogger(DesCipher.class);

// 密钥生成器

private KeyGenerator keygen = null;

// 保存对称密钥

private SecretKey secKey = null;

// 负责完成加密/解密

private Cipher cipher = null;

 

/**

* 使用指定算法加密/解密。

* @param algorithm

*/

public DesCipher(String algorithm) {

try {

keygen = KeyGenerator.getInstance(algorithm);

secKey = keygen.generateKey();

cipher = Cipher.getInstance(algorithm);

} catch (NoSuchAlgorithmException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (NoSuchPaddingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 

/**

* msg进行加密并返回密文。

* @param msg

* @return

*/

public byte[] encryp(String msg) {

try {

// Cipher.ENCRYPT_MODE:表示加密

cipher.init(Cipher.ENCRYPT_MODE, secKey);

byte[] encrypMsg = cipher.doFinal(msg.getBytes());

logger.debug("加密后是:" + new String(encrypMsg));

return encrypMsg;

} catch (InvalidKeyException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalBlockSizeException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (BadPaddingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

 

/**

* 解密。

* @return

*/

public byte[] decryp(byte[] encrypMsg) {

try {

cipher.init(Cipher.DECRYPT_MODE,secKey);

byte[] decrypMsg = cipher.doFinal(encrypMsg);

logger.debug("解密后的内容:" + new String(decrypMsg));

return decrypMsg;

} catch (InvalidKeyException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalBlockSizeException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (BadPaddingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

/**

* @param args

*/

public static void main(String[] args) {

String msg = "java安全编程技术_DES";

logger.debug("原文:" + msg);

DesCipher dc = new DesCipher("DES");

byte[] encrypMsg = dc.encryp(msg);

byte[] decrypMsg = dc.decryp(encrypMsg);

}

 

}

 

输出:

2013-01-29 14:15:14,003[main]DEBUG [main] - 原文:java安全编程技术_DES

2013-01-29 14:15:14,268[main]DEBUG [main] - 加密后是:N豣a疥噍/]薉>嘻�灹L

2013-01-29 14:15:14,268[main]DEBUG [main] - 解密后的内容:java安全编程技术_DES

你可能感兴趣的:(java,算法)