前言:前端在一些数据获取或提交时有些敏感信息需要加密处理,比如最近遇到一个bug,是测试在登录时修改了用户的等级字段,从而就看到了其他用户权限下的页面。
AES加密有两种模式:ECB模式和CBC模式,需要与后端约定好使用相同的模式
首先,先引入js加密算法类库
npm i crypto-js --save
ECB模式:
key为密钥,需要与后端约定一致
const CryptoJS = require("crypto-js"); //引用AES源码js
// 加密方法
export function Encrypt(word) {
let key = CryptoJS.enc.Utf8.parse("1234567891234567"); //16位数作为密钥
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();
}
// 解密方法
export function Decrypt(word) {
let key = CryptoJS.enc.Utf8.parse("1234567891234567");//16位数作为密钥
let decrypt = CryptoJS.AES.decrypt(word, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}
CBC模式 :
key为密钥,需要与后端约定一致,iv为密钥偏移量
const CryptoJS = require('crypto-js'); //引用AES源码js
//解密方法
export function Decrypt(word) {
const key = CryptoJS.enc.Utf8.parse("abcd1234abcd1234"); //16位数作为密钥
const iv = CryptoJS.enc.Utf8.parse('ABCD1234ABCD1234'); //16位数作为密钥偏移量
let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
return decryptedStr.toString();
}
//加密方法
export function Encrypt(word) {
const key = CryptoJS.enc.Utf8.parse("abcd1234abcd1234"); //16位数作为密钥
const iv = CryptoJS.enc.Utf8.parse('ABCD1234ABCD1234'); //16位数作为密钥偏移量
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
return encrypted.ciphertext.toString().toUpperCase();
}