写在前面
最近了解了一下加密算法,在此特作以下总结,便于日后查阅,如果有问题的地方希望大家可以指出,在此转发以为博主的文章对对称加密和AES加密有深刻清晰的讲解--对称加密及AES加密算法)
什么是AES加密
AES加密的应用场景,AES加密可逆转加密,前后端公用一个秘钥来加密解密
安装
npm install crypto-js --save-dev
引入
import CryptoJS from "crypto-js";
使用
//随机生成秘钥
function getKey(n) {
var chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
if (n == null) {
n = 8;
}
var res = "";
for (var i = 0; i < n; i++) {
var id = Math.ceil(Math.random() * 35);
res += chars[id];
}
return res;
}
let pas = getKey();//因为是函数每调用一次就会生成一个新的秘钥
// 加密
function encrypt(word, keyStr, ivStr) {
keyStr = keyStr ? keyStr : pas;
ivStr = ivStr ? ivStr : "123456789";
let key = CryptoJS.enc.Utf8.parse(keyStr);
//console.log(key);
let iv = CryptoJS.enc.Utf8.parse(ivStr);
let src = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(src, key, {
iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.ZeroPadding
});
// console.log(CryptoJS.enc.Base64.stringify(encrypted.ciphertext),encrypted.toString());
return encrypted.toString();
}
// 解密
function decrypt(word, keyStr, ivStr){
keyStr = keyStr ? keyStr : pas;
ivStr = ivStr ? ivStr : "123456789";
var key = CryptoJS.enc.Utf8.parse(keyStr);
let iv = CryptoJS.enc.Utf8.parse(ivStr);
let base64 = CryptoJS.enc.Base64.parse(word);
let src = CryptoJS.enc.Base64.stringify(base64);
var decrypt = CryptoJS.AES.decrypt(src, key, {
iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.ZeroPadding
});
// console.log(decrypt.toString(CryptoJS.enc.Utf8),(decrypt.toString(CryptoJS.enc.Utf8)).toString(),CryptoJS.enc.Utf8.stringify(decrypt).toString())
return decrypt.toString(CryptoJS.enc.Utf8);
}
console.log(encrypt('这是要加密的数据'));
console.log(decrypt(encrypt('这是要加密的数据')));
介绍
- ASE加密是对称加密,即使用同一个密钥进行加密解密,
- 需要注意的是前后端需要规定一样的mode和状态,可以参考对称加密及AES加密算法的第5点
"实际开发中使用AES加密需要注意的地方"
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。