前端实现 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"));

参考资料:https://www.cxyzjd.com/article/sx_1024/107710102