java使⽤AES加密⽰例(⼀看即会)
aes是什么?
aes是对称加密的⼀种,什么是对称加密呢?就是加密和解密使⽤相同的秘钥的加密算法,显⽽易见,aes加密和md5不同,aes是可逆的,aes加密算法⽤于替代以前的des加密算法。
使⽤场景:
⼯作的过程中,我们有些⽂件因为需要携带出公司,可能需要加密,最常见的⽐如源代码加密。如果我想让加密可逆,⼜能⾃⼰指定加密和解密使⽤的秘钥,那么aes加密算法真的是⼀个不错的选择哦。因为既然可以⾃⼰指定秘钥,我们控制起来就会让aes这个加密算法安全很多。
1.⼯具类:
public class AESUtil {
private static final String KEY_ALGORITHM = "AES";
/**
* 默认的加密算法
*/
private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
private static Logger log;
/**
* 随机⽣成密钥
*
* @return
*/
public static String getAESRandomKey() {
SecureRandom random = new SecureRandom();
long randomKey = Long();
return String.valueOf(randomKey);
}
/**
* AES 加密操作
*
* @param content 待加密内容
* @param key 加密密钥
* @return 返回Base64转码后的加密数据
*/
public static String encrypt(String content, String key) throws Exception {
try {
// 创建密码器
Cipher cipher = Instance(DEFAULT_CIPHER_ALGORITHM);
byte[] byteContent = Bytes("utf-8");
// 初始化为加密模式的密码器
cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(key));
// 加密
byte[] result = cipher.doFinal(byteContent);
//通过Base64转码返回
return byte2Base64(result);
} catch (Exception ex) {
<("加密失败", ex);
}
return null;
}
/**
* AES 解密操作
* AES 解密操作
*
* @param content
* @param key
* @return
*/
public static String decrypt(String content, String key) {
try {
//实例化
Cipher cipher = Instance(DEFAULT_CIPHER_ALGORITHM);
//使⽤密钥初始化,设置为解密模式
cipher.init(Cipher.DECRYPT_MODE, getSecretKey(key));
//执⾏操作
byte[] result = cipher.doFinal(base642Byte(content));
return new String(result, "utf-8");
} catch (Exception ex) {
<("解密失败", ex);
}
return null;
}
/**
* ⽣成加密秘钥
*
* @return
*/java源代码加密
private static SecretKeySpec getSecretKey(final String key) {
//返回⽣成指定算法密钥⽣成器的 KeyGenerator 对象
try {
KeyGenerator kg = Instance(KEY_ALGORITHM);
// 此类提供加密的强随机数⽣成器 (RNG),该实现在windows上每次⽣成的key都相同,但是在部分linux或solaris系统上则不同。 // SecureRandom random = new Bytes());
// 指定算法名称,不同的系统上⽣成的key是相同的。
SecureRandom random = Instance("SHA1PRNG");
random.Bytes());
//AES 要求密钥长度为 128
kg.init(128, random);
//⽣成⼀个密钥
SecretKey secretKey = kg.generateKey();
// 转换为AES专⽤密钥
return new Encoded(), KEY_ALGORITHM);
} catch (NoSuchAlgorithmException ex) {
log.info("⽣成加密秘钥异常!");
}
return null;
}
/**
* 字节数组转Base64编码
*
* @param bytes
* @return
*/
public static String byte2Base64(byte[] bytes) {
BASE64Encoder encoder = new BASE64Encoder();
de(bytes);
}
/**
* Base64编码转字节数组
*
* @param base64Key
* @return
* @throws IOException
*/
*/
public static byte[] base642Byte(String base64Key) throws IOException { BASE64Decoder decoder = new BASE64Decoder();
return decoder.decodeBuffer(base64Key);
}
}
2.测试类
public class AESUtilTest {
public static void main(String[] args) throws Exception {
String content = "hello,您好";
String key = "98496561648451AZAHVGHXQVCXQy";
System.out.println("原⽂=" + content);
String s1 = pt(content, key);
System.out.println("加密结果=" + s1);
System.out.println("解密结果="+AESUtil.decrypt(s1, key));
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论