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

在使用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 编码格式
      },

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值