You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从CryptoJS解密后的words数组与sigBytes还原原始JSON字符串

问题:如何将CryptoJS AES解密后的WordArray对象转为可读JSON字符串?

问题详情

  • 原始Payload:{"msg":"This is encrypted using AES"}
  • 初始化向量(iv):1110000348111000
  • 密钥(key):8880002784888000
  • 加密字符串:QxpJspQ5AjeX0HK3uLjSNLZK/i8VWxcXfjpMLghZrSKui/m5XNO5at0jvsI4qGMC
  • 解密后返回的异常WordArray对象:
{
  words: [
    -1965411475,  1913178924,
      601984393, -1493862515,
     1415172454, -1789306172,
      750380297, -1517138640,
     -934802361,  1164290040,
    -1702889832,  1716466309
  ],
  sigBytes: -85
}

解决方案

1. 先修复解密参数异常

sigBytes: -85是无效解密的标志,说明你当前的解密参数和加密端不匹配。核心要确保:

  • 密钥、IV的编码方式和加密端完全一致(比如都用UTF-8解析)
  • 加解密的模式(如CBC)、填充方式(如Pkcs7)保持同步(CryptoJS默认是CBC+Pkcs7,若加密端自定义了参数,解密时必须同步设置)

2. 正确转换有效解密结果为可读JSON

当解密参数正确后,CryptoJS.AES.decrypt()会返回有效的WordArray对象,直接用内置方法转换即可:

// 加密字符串
const encryptedStr = 'QxpJspQ5AjeX0HK3uLjSNLZK/i8VWxcXfjpMLghZrSKui/m5XNO5at0jvsI4qGMC';
// 将密钥和IV转为CryptoJS认可的WordArray格式
const key = CryptoJS.enc.Utf8.parse('8880002784888000');
const iv = CryptoJS.enc.Utf8.parse('1110000348111000');

// 执行解密(确保模式、填充与加密端一致)
const decryptedWordArray = CryptoJS.AES.decrypt(encryptedStr, key, { iv: iv });

// 转为UTF-8字符串
const decryptedStr = decryptedWordArray.toString(CryptoJS.enc.Utf8);
// 解析为原始JSON对象
const originalPayload = JSON.parse(decryptedStr);

console.log(originalPayload); // 输出:{"msg":"This is encrypted using AES"}

3. 常见排查点

  • 如果解密后字符串乱码,优先检查密钥、IV的正确性,以及编码格式是否和加密端一致(比如加密用Hex编码,解密也要用CryptoJS.enc.Hex.parse()转换)
  • 若加密端使用了自定义的密钥派生方式(如PBKDF2),解密时必须同步实现相同的派生逻辑

内容的提问来源于stack exchange,提问作者Mayank_MP5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:15:41