AES 加密算法实现
JAVA 实现
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class AESUtil {
private static final String DEFAULT_KEY="hj7x89H$yuBI0456";
private static final String DEFAULT_IV ="NIfb&95GUY86Gfgh";
/**
* @Ddescription AES加密
* @param key 16位秘钥
* @param iv 向量iv
* @param plaintext 明文
* @return 密文
*/
public static String encrypt(String key, String iv, String plaintext) throws Exception {
Cipher cipher = getCipher(key,iv,Cipher.ENCRYPT_MODE);
byte[] bytes = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(bytes);
}
/**
* @Description AES解密
* @param key 16位秘钥
* @param iv 向量iv
* @param ciphertext 密文
* @return 明文
*/
public static String decrypt(String key, String iv, String ciphertext) throws Exception {
Cipher cipher = getCipher(key,iv,Cipher.DECRYPT_MODE);
byte[] bytes = cipher.doFinal(Base64.getDecoder().decode(ciphertext));
return new String(bytes,StandardCharsets.UTF_8);
}
private static Cipher getCipher(String key, String iv,int mode) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes(StandardCharsets.UTF_8));
cipher.init(mode, keySpec, ivSpec);
return cipher;
}
public static void main(String[] args) throws Exception {
String text = "JDK 中是由名为 “SunJCE” 的提供商提供密钥算法的,如果没有指定其他提供商,则会默认使用该提供商的密钥算法。如果要使用特定的算法,而对该算法 Oracle 公司没有提供支持,那么也可以指定其他的提供商。";
String ciphertext = encrypt(DEFAULT_KEY,DEFAULT_IV,text);
System.out.println(ciphertext);
String plaintext = decrypt(DEFAULT_KEY,DEFAULT_IV,ciphertext);
System.out.println(plaintext);
}
}
JAVASCRIPT 实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>AES</title>
</head>
<body>
<script src="https://cdn.bootcdn.net/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
<script type="text/javascript">
// 解密
function decrypt(text) {
let decrypted = CryptoJS.AES.decrypt(text, CryptoJS.enc.Utf8.parse(key), {
iv: CryptoJS.enc.Utf8.parse(iv),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8)
}
// 加密
function encrypt(text) {
return CryptoJS.AES.encrypt(text, CryptoJS.enc.Utf8.parse(key), {
iv: CryptoJS.enc.Utf8.parse(iv),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}).toString()
}
const key = 'hj7x89H$yuBI0456';
const iv = 'NIfb&95GUY86Gfgh';
let text = "JDK 中是由名为 “SunJCE” 的提供商提供密钥算法的,如果没有指定其他提供商,则会默认使用该提供商的密钥算法。如果要使用特定的算法,而对该算法 Oracle 公司没有提供支持,那么也可以指定其他的提供商。";
console.log('解密前明文:',text)
let ciphertext = encrypt(text);
console.log('密文:',ciphertext)
const plaintext = decrypt(ciphertext);
console.log('解密后明文:',plaintext)
</script>
</body>
</html>
不积跬步无以至千里
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具