您的位置:首页 > 其它

加密算法使用(四):AES的使用

2016-04-26 17:54 302 查看
AES是一种对称加密方式,比DES更为安全,用一个秘钥加密数据之后,可以用同一个秘钥对加密后的数据解密还原,以下是一套以字符串为例子的使用全过程演示,

用到了

commons-codec.jar


package testEncrypt;

import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

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 javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;
//import sun.misc.BASE64Encoder;
public class TestAesEncrypt {

public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
//随机生成密钥
KeyGenerator keygen = KeyGenerator.getInstance("AES");
//SecureRandom random = new SecureRandom(Base64.decodeBase64("abc"));
SecureRandom random = new SecureRandom();
keygen.init(random);
Key key = keygen.generateKey();
//获取秘钥字符串
String key64Str = Base64.encodeBase64String(key.getEncoded());
//要加密的数据
String dataStr="da89gh9qj3ebg9babjdslgbuqgb&FTUG^(GB";
System.out.println("要加密的数据:"+dataStr);

//还原秘钥字符串到秘钥byte数组
byte[] keyByteArray = Base64.decodeBase64(key64Str);
//重新形成秘钥,SecretKey是Key的子类
SecretKey secretKey = new SecretKeySpec(keyByteArray, "AES");

//初始化加密组件
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);

//加密后的数据,首先将字符串转为byte数组,然后加密,为便于保存先转为base64
String encryptedDataStr = Base64.encodeBase64String(cipher.doFinal(dataStr.getBytes()));
System.out.println("加密后的数据:"+encryptedDataStr);

//将加密组件的模式改为解密
cipher.init(Cipher.DECRYPT_MODE, secretKey);
//和上面的加密相反,先解base64,再解密,最后将byte数组转为字符串
String decodeDataStr = new String(cipher.doFinal(Base64.decodeBase64(encryptedDataStr)));
System.out.println("解密后的数据:"+decodeDataStr);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: