前端使用 CryptoJS 解密时,经常会遇到 'malformed utf-8 data' 错误,这通常是由于前端解密时使用的编码方式与后端加密时使用的编码方式不一致导致的。

解决方案:

  1. 指定正确的编码方式

在前端解密时,可以指定正确的编码方式,例如使用 UTF-8 编码方式:

var decryptedData = CryptoJS.AES.decrypt(ciphertext, key, {
  mode: CryptoJS.mode.ECB,
  padding: CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Utf8);

其中 CryptoJS.enc.Utf8 表示使用 UTF-8 编码方式解密数据。

  1. 使用 Base64 解码

如果后端加密时使用了 Base64 编码,前端需要先使用 Base64 解码再进行解密,例如:

var decodedData = CryptoJS.enc.Base64.parse(ciphertext).toString(CryptoJS.enc.Utf8);
var decryptedData = CryptoJS.AES.decrypt(decodedData, key, {
  mode: CryptoJS.mode.ECB,
  padding: CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Utf8);

通过以上两种方法,就可以解决前端 CryptoJS 解密时遇到的 'malformed utf-8 data' 错误。

前端CryptoJS解密报错'malformed utf-8 data':原因及解决方法

原文地址: https://www.cveoy.top/t/topic/oocY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录