前提使用 CryptoJS 库
可以在 npm 包管理器中下载后进行使用
按照顺序引入这些js文件
core-min.js
enc-base64-min.js
md5-min.js
evpkdf-min.js
cipher-core-min.js
aes-min.js
pad-pkcs7.js
mode-ecb-min.js
enc-utf8.js
enc-hex.js
1.Aes 加密(无填充模式)
//AES加密
function encrypt_Aes(text,key) {
debugger
let textHexStr = CryptoJS.enc.Hex.parse(text)
let keyUtf8 = CryptoJS.enc.Utf8.parse(key)
let encryptedData = CryptoJS.AES.encrypt(textHexStr, keyUtf8, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
})
let encryptedHexStr = arrayToHexStr(encryptedData.ciphertext.words)
return encryptedHexStr;
}
function arrayToHexStr(array) {
let hexStr = "";
for(let i = 0; i < array.length; i++) {
let num = array[i];
if (num < 0) {
num = array[i] + 0x100000000;
}
const str = num.toString(16).padStart(8,'0');
hexStr = hexStr + str;
}
return hexStr;
}
2.AES解密
function decrypt_Aes(text, key) {
//针对AES已经构建好的对象解密
// let encryptedBase64Str = CryptoJS.enc.Base64.stringify(text)
//针对字符串构建对象解密
let str2Byte = hexStr2Byte(text)
let strArr = int8parse(str2Byte)
let encryptedBase64Str = CryptoJS.enc.Base64.stringify(strArr);
let keyUtf8 = CryptoJS.enc.Utf8.parse(key)
let decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, keyUtf8, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
})
let decryptedStr = decryptedData.toString(CryptoJS.enc.Hex)
return decryptedStr;
}
//String 转数组
function hexStr2Byte(hex) {
var bf = new Array();
for (var i = 0; i < hex.length; i++) {
var hexStr = hex.charAt(i) + "";
i++;
hexStr += hex.charAt(i);
var b = parseInt(hexStr, 16);
bf.push(b);//这个 bf+=b是拼接不是数组
}
return bf;
}
// 构建对象
function int8parse(u8arr) {
let len = u8arr.length;
let words = [];
for (let i = 0; i < len; i++) {
words[i >>> 2] |= (u8arr[i] & 0xff) << (24 - (i % 4) * 8);
}
return CryptoJS.lib.WordArray.create(words, len);
}