首页 前端知识 crypto-js解密报错malformed utf-8 data

crypto-js解密报错malformed utf-8 data

2024-03-27 10:03:16 前端知识 前端哥 223 399 我要收藏

在使用crypto-js进行解密的时候,有可能会报错:

Malformed UTF-8 data
Error: Malformed UTF-8 data

很多贴子说没有进行base64转码,但是当你进行了base64转码之后如果还是存在这个问题该如何解决?

首先如果你是从接口里取出来的数据且保证这个数据在解码网站解码正确的前提下,将接口返回数据使用res.replace(/\s/g,'')正则过滤掉空格,然后问题就解决啦

原因:接口返回结果浏览器会自动换行导致数据中存在换行,base64无法正常转码,过滤掉空格就可以了,有的网站可以正常解码出来是因为他们内置了去掉空格。

var str1 = res.replace(/\s/g,'')
this.result = JSON.parse(this.decryptByDES(str1)) || {}
      decryptByDES(ciphertext, key='***', iv='***'){
          const keyHex = cryptoJs.enc.Utf8.parse(key);
          const decrypted = cryptoJs.TripleDES.decrypt({
            // ciphertext: cryptoJs.enc.Hex.parse(ciphertext) // hex 编码解密
            ciphertext: cryptoJs.enc.Base64.parse(ciphertext) // base64 编码解密
          }, keyHex, {
            mode: cryptoJs.mode.CBC, // CBC模式
            padding: cryptoJs.pad.Pkcs7, // pkcs7padding 填充方式
            iv: cryptoJs.enc.Utf8.parse(iv) // 设置偏移量(若 ECB 模式则删除该行)
          });
          return decrypted.toString(cryptoJs.enc.Utf8); // 返回 base64 编码格式
      },

转载请注明出处或者链接地址:https://www.qianduange.cn//article/4185.html
标签
评论
会员中心 联系我 留言建议 回顶部
复制成功!