前端实现 AES/CBC/PKCS5Padding 加解密
安装 crypto-js 模块
crypto-js 是一个 JavaScript 库,提供了各种加密算法,例如:md5、sha1、aes。
npm install crypto-js
编写 utils.js 模块
// 引入 crypto-js 模块
import CryptoJS from "crypto-js";
// 加密
function encrypt(word) {
// 密钥和向量一般由后台提供,这里为16位长度的大写字符串
let key = '44AAE35E0C534B30';
let iv = '03B435C0E53EAA44';
key = CryptoJS.enc.Utf8.parse(key);
iv = CryptoJS.enc.Utf8.parse(iv);
let srcs = CryptoJS.enc.Utf8.parse(word);
// 加密模式为CBC,补码方式为PKCS5Padding(也就是PKCS7)
let encrypted = CryptoJS.AES.encrypt(srcs, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
//返回base64
return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}
// 解密
function decrypt(word) {
let key = '44AAE35E0C534B30';
let iv = '03B435C0E53EAA44';
key = CryptoJS.enc.Utf8.parse(key);
iv = CryptoJS.enc.Utf8.parse(iv);
let base64 = CryptoJS.enc.Base64.parse(word);
let src = CryptoJS.enc.Base64.stringify(base64);
// 解密模式为CBC,补码方式为PKCS5Padding(也就是PKCS7)
let decrypt = CryptoJS.AES.decrypt(src, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
return decryptedStr.toString();
}
export default { encrypt, decrypt }
使用
// 引入 utils.js 模块
import utils from './utils.js'
console.log(utils.decrypt("QLbUGq/7fkVtWl0k1no8CA=="));
console.log(utils.encrypt("abc"));