使用CryptoJS AES加密字符串返回异常值,寻求技术帮助
问题解决:CryptoJS AES加密解密结果不符合预期
问题原因
你遇到的问题是CryptoJS的API返回值并非直接的字符串:
CryptoJS.AES.encrypt()返回的是CipherParams对象,不是你预期的Base64密文字符串,直接调用无法得到目标格式。CryptoJS.AES.decrypt()返回的是WordArray对象,默认调用toString()会输出十六进制编码(6869就是"hi"的十六进制ASCII值:h=0x68,i=0x69),而非明文。
修改后的代码
调整加密解密函数,补充对应的转换方法:
<!DOCTYPE html> <html lang="nl"> <head> <link rel="stylesheet" type="text/css" href="/denoryplay3/css/style.css"> <title>Encryption</title> </head> <body> <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js" integrity="sha256-/H4YS+7aYb9kJ5OKhFYPUjSJdrtV6AeyJOtTkw6X72o=" crossorigin="anonymous"></script> <script> function encrypt(data, key){ // 调用toString()获取Base64格式密文 return CryptoJS.AES.encrypt(data, key).toString(); } function decrypt(data, key){ // 指定Utf8编码,将WordArray转换为明文字符串 return CryptoJS.AES.decrypt(data, key).toString(CryptoJS.enc.Utf8); } </script> </body> </html>
测试验证
运行以下代码验证效果:
// 查看加密后的Base64密文 alert(encrypt("hi", "12345")); // 会弹出类似U2FsdGVkX1++p462vXg3LggRE5kzRtX3VbKkcMBWuHY=的密文 // 验证解密结果 alert(decrypt(encrypt("hi", "12345"), '12345')); // 弹出明文"hi"
内容的提问来源于stack exchange,提问作者denoryprogrammer
相关产品推荐
相关产品推荐

