项目中用到AES算法做传输加密的优点。 1、对内存的需求非常低,适合于受限环境。 2、运算速度快。 3、分组长度和密钥长度设计灵活。 4、很好的抵抗差分密码分析及线性密码分析的能力。 5、AES的密钥长度比DES大,它也可设定为32比特的任意倍数,最小值为128比特,最大值为256比特,所以用穷举法是不可能破解的。
简单说一下 1、安装crypto-js依赖
npm install crypto-js --save-dev
2、创建配置文件AES.js 路径可以按照这个src/utils/AES.js
import CryptoJS from "crypto-js";
//随机生成指定数量的32进制key
export default {
generatekey(num) {
let library =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
let key = "";
for (let i = 0; i < num; i++) {
let randomPoz = Math.floor(Math.random() * library.length);
key += library.substring(randomPoz, randomPoz + 1);
}
return key;
},
//加密
encrypt(word, keyStr) {
// 判断是否存在keyStr,不存在就用默认的keyStr(注意:这个keyStr必需要前后端统一,不然双方加密解密后会不相同。调用generatekey方法生成)
keyStr = keyStr ? keyStr : "1grLx91U40VawzhRAm7E";
let key = CryptoJS.enc.Utf8.parse(keyStr);
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
},
//解密
decrypt(word, keyStr) {
keyStr = keyStr ? keyStr : "1grLx91U40VawzhRAm7E";
let key = CryptoJS.enc.Utf8.parse(keyStr);
let decrypt = CryptoJS.AES.decrypt(word, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}
};
3、使用 因为用的地方比较多我直接挂载在vue的prototype上方便我直接调用,在main.js中加加上以下代码。
import AES from './utils/AES';
Vue.prototype.$aes = AES;
例:
// 注意:如果是对象/数组的话,需要先转换成字符串
//调用加密方法
let cars = '离谱到家158855515485451'
let encrypts = this.$aes.encrypt(cars);
//调用解密方法
let dess = this.$aes.decrypt("P2Cq833yWdH8se2rHTbxlx6pFIQpdJ9515hNIIi5rlU=");
console.log("加密",encrypts);
console.log("解密",dess);
|