CryptoJS
加密:
aesJson (str, secretKey, aesIv, padding) {let keylet ivkey = CryptoJS.enc.Utf8.parse(secretKey)iv = CryptoJS.enc.Utf8.parse(aesIv)let plaintText = str // CryptoJS.enc.Utf8.parse(str) 明文stringlet encrypted = CryptoJS.AES.encrypt(plaintText, key, {iv: iv,mode: CryptoJS.mode.CBC,padding: padding && CryptoJS.pad.Pkcs7})let data2if (padding) {data2 = encrypted.ciphertext.toString()} else {data2 = encrypted.toString() // 加密后的数据}return data2
}
加密注意:hex 模式生成密文只去加密后ciphertext里面的数据,转json
解密:
function decrypt (data, secretKey, aesIv, padding) {// key,iv:16位的字符串let encryptedBase64Strif (padding) {// Hex 模式解密encryptedBase64Str = {ciphertext: CryptoJS.enc.Hex.parse(data) }} else {encryptedBase64Str = data}let keylet ivkey = CryptoJS.enc.Utf8.parse(secretKey)iv = CryptoJS.enc.Utf8.parse(aesIv)// console.log(data, encryptedBase64Str)let decrypted = CryptoJS.AES.decrypt(encryptedBase64Str, key, {iv: iv,mode: CryptoJS.mode.CBC,padding: padding && CryptoJS.pad.Pkcs7})// return JSON.parse(decrypted.toString(padding ? CryptoJS.enc.Hex : CryptoJS.enc.Utf8))return JSON.parse(decrypted.toString(CryptoJS.enc.Utf8))
}
注意:解密需对密文先进行hex转译,然后使用放在对象ciphertext中
坑:
Malformed UTF-8 data(报错)解密时没有,对密文先进行hex转译,然后使用放在对象ciphertext中