CryptoJS
加密:
aesJson (str, secretKey, aesIv, padding) {
let key
let iv
key = CryptoJS.enc.Utf8.parse(secretKey)
iv = CryptoJS.enc.Utf8.parse(aesIv)
let plaintText = str // CryptoJS.enc.Utf8.parse(str) 明文string
let encrypted = CryptoJS.AES.encrypt(plaintText, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: padding && CryptoJS.pad.Pkcs7
})
let data2
if (padding) {
data2 = encrypted.ciphertext.toString()
} else {
data2 = encrypted.toString() // 加密后的数据
}
return data2
}
加密注意:hex 模式生成密文只去加密后ciphertext里面的数据,转json
解密:
function decrypt (data, secretKey, aesIv, padding) {
// key,iv:16位的字符串
let encryptedBase64Str
if (padding) {
// Hex 模式解密
encryptedBase64Str = {ciphertext: CryptoJS.enc.Hex.parse(data) }
} else {
encryptedBase64Str = data
}
let key
let iv
key = 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中