aes加密 base格式,解密时报错Malformed UTF-8 data
网上搜了几个方法都不管用,解密报错Malformed UTF-8 data,本地写html测试加密解密时可以用的。
// AES解密方法
function decrypt(word) {
debugger;
// AES.decrypt是解密函数
if (word) {
// 将需要解密的文件Base64字符串转成WordArray对象
let base64 = CryptoJS.enc.Base64.parse(word)
// 将WordArray对象转成Base64字符串
let src = CryptoJS.enc.Base64.stringify(base64)
// iv偏移向量,mode加密模式,padding填充方式,传Base64字符串和加密秘钥给.AES.decrypt解密方法
var decrypt = CryptoJS.AES.decrypt(src, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.ZeroPadding
})
// wordArray对象转成16进制字符串
var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8)
// console.log(decryptedStr.toString())
return decryptedStr.toString()
} else {
return word
}
};
"该回答引用ChatGPT"
可参考下面的解决方案 ,如果可行 还请点击 采纳,感谢!
此错误是因为解密后的数据不是合法的UTF-8格式导致的。
可以尝试使用下面的代码来修复此错误:
var decryptedStr = CryptoJS.enc.Hex.stringify(decrypt)
decryptedStr = decodeURIComponent(escape(hex2a(decryptedStr)))
在解密函数的最后加入上述代码,将解密出的十六进制字符串转成字符串,再通过decodeURIComponent和escape函数将其转换成可读的字符串。