aes前端js加解密
在开发中,总有一些特殊数据需要包装一下子,很多的加密解密要么针对前端要么侧重于后端
场景:项目中需要对用户的一些些相关信息进行安全包装,接口请求,后台Java对返回的数据进行加密,前端解密。
问题:老项目了,引入的aes.js相关文件包,一直解密不出来。最后排查到是引入的文件包有问题,全部替换成cdn的地址即可
<script src="http://cdn.bootcss.com/crypto-js/3.1.2/components/core.js"></script>
<script src="http://cdn.bootcss.com/crypto-js/3.1.2/rollups/aes.js"></script>
<script src="http://cdn.bootcss.com/crypto-js/3.1.2/components/enc-base64.js"></script>
<script src="http://cdn.bootcss.com/crypto-js/3.1.2/components/mode-ecb-min.js"></script>
<script src="http://cdn.bootcss.com/crypto-js/3.1.2/components/cipher-core-min.js"></script>
// 密钥
var key = CryptoJS.enc.Utf8.parse("qwertyuio!@#$%^&");
// 加密
function encrypt(content) {
var encryptResult = CryptoJS.AES.encrypt(content, key, {
//iv: iv,
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
let hexResult=CryptoJS.enc.Base64.parse(encryptResult.toString());
var abc = CryptoJS.enc.Hex.stringify(hexResult);
return abc.toString();
}
// 解密
function decrypt(content) {
let hexResult=CryptoJS.enc.Hex.parse(content); // Base64解密
let ciphertext=CryptoJS.enc.Base64.stringify(hexResult); // Base64解密
var options = {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
};
// 解密
var decryptedData = CryptoJS.AES.decrypt(ciphertext, key, options);
// 解密后,需要按照Utf8的方式将明文转位字符串
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);
return decryptedStr ;
}
var name = encrypt($scope.userName); // 加密
var bytes = decrypt(name );
var plaintext = bytes.toString(CryptoJS.enc.Utf8); // 解密
console.log(plaintext)