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

使用CryptoJS的TripleDES解密返回空字符串问题求助

问题排查与修复方案

核心问题分析

你的解密代码存在三个关键错误,导致解密结果为空:

1. 密钥生成逻辑错误

你当前通过CryptoJS.MD5(SharedKey).toString()生成密钥,但实际加密使用的共享密钥是16进制字符串36fd14ddcd755bb37879cbe99ca26c92,并非ClientSecret和ApiKey拼接后的MD5值。此外,直接用字符串作为密钥时,CryptoJS会默认以UTF-8编码解析,而16进制密钥需要用Hex编码解析为字节数组。

2. 未匹配加密模式与IV

在线工具默认使用CBC模式,且未手动设置IV时,会采用全8字节0的IV(TripleDES块大小为8字节)。你的代码未指定模式和IV,CryptoJS默认使用ECB模式,与加密时的模式不匹配,直接导致解密失败。

3. 密钥格式处理错误

解密时密钥需要转换为WordArray类型,而非字符串,否则会引发密钥解析异常,无法正确解密。

修复后的代码

export const decryptData = () => {
    // 加密时使用的16进制共享密钥
    const sharedKeyHex = '36fd14ddcd755bb37879cbe99ca26c92';
    const encryptedData = 'NbU4PoYHR9IJtSLmHRubpg==';
  
    // 将16进制密钥解析为WordArray
    const key = CryptoJS.enc.Hex.parse(sharedKeyHex);
    // 在线工具默认使用的全0IV(8字节,对应16个16进制字符)
    const iv = CryptoJS.enc.Hex.parse('0000000000000000');
  
    const decrypted = CryptoJS.TripleDES.decrypt(
        encryptedData,
        key,
        {
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        }
    );
  
    // 转换为UTF-8明文输出
    console.log('decrypt', decrypted.toString(CryptoJS.enc.Utf8));
};

额外验证说明

  • 如果你生成加密串时手动设置了IV,需要将代码中的iv替换为当时使用的16进制IV值(必须是8字节,即16个16进制字符)。
  • 若加密时使用了非PKCS7的填充方式,需同步修改padding参数为对应值(如CryptoJS.pad.ZeroPadding)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:35:25