使用CryptoJS库来实现AES的加密和解密
前置条件, 请确保下载了CryptoJS库并放置在aes.js文件所在目录
创建一个aes.js文件, 内容如下
// 引入CryptoJS库
const CryptoJS = require("./crypto-js");
// 定义加密密钥,这里使用Base64编码的字符串
let key = "YWJjZGVmZzEyMzQ1Njc4OQ==";
// 将Base64编码的密钥解析为CryptoJS可识别的格式
let keyBase64 = CryptoJS.enc.Base64.parse(key);
// 初始化向量(IV),这里使用空字符串的Utf8编码,通常IV应该是随机生成的,但这里为了示例使用空字符串
let iv = CryptoJS.enc.Utf8.parse("");
/**
* 明文AES加密函数
* @param {String} plainText 需要加密的明文
* @returns {String} 加密后的密文字符串
*/
function aesEncrypt(plainText) {
// 如果传入的明文未定义,则直接返回
if (plainText == undefined) {
return plainText;
}
// 使用AES算法、CBC模式和PKCS#7填充对明文进行加密
const encryptedData = CryptoJS.AES.encrypt(plainText, keyBase64, {
iv: iv, // 使用上面定义的IV
mode: CryptoJS.mode.CBC, // 加密模式设置为CBC
padding: CryptoJS.pad.Pkcs7, // 填充方式设置为PKCS#7
});
// 将加密后的对象转换为字符串形式返回
return encryptedData.toString();
}
/**
* 密文解密函数
* @param {String} cipherText 需要解密的密文字符串
* @returns {String} 解密后的明文字符串
*/
function aesDecrypt(cipherText) {
// 如果传入的密文未定义,则直接返回
if (cipherText == undefined) {
return cipherText;
}
// 使用AES算法、CBC模式和PKCS#7填充对密文进行解密,并指定返回格式为Utf8字符串
const decryptedData = CryptoJS.AES.decrypt(cipherText, keyBase64, {
iv: iv, // 使用上面定义的IV
mode: CryptoJS.mode.CBC, // 加密模式设置为CBC
padding: CryptoJS.pad.Pkcs7, // 填充方式设置为PKCS#7
}).toString(CryptoJS.enc.Utf8);
// 返回解密后的明文
return decryptedData;
}
const plainText = "测试加密";
const cipherText = aesEncrypt(plainText);
console.log("密文 :>> ", cipherText);
const decryptText = aesDecrypt(cipherText);
console.log("明文 :>> ", decryptText);
可使用node运行
node aes.js
运行结果如下