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

Node.js crypto模块与CryptoJS实现AES256解密的差异问题排查

问题原因

这个报错是填充规则差异导致的,和编码处理无关:

  • 你编写的CryptoJS代码明确指定了padding: CryptoJS.pad.ZeroPadding零填充,并且后续通过自定义的strippadding方法处理填充内容
  • Node.js内置crypto模块的createDecipheriv默认启用PKCS7填充校验,解密时会自动校验末尾的PKCS7填充是否合法,你的密文使用的是自定义填充规则,自然会触发bad decrypt报错

修复方案

只需要在创建decipher实例后关闭默认的自动填充校验即可,其余逻辑不需要改动:

function create_aes_decrypt(tradeinfo, key, iv, algorithm) {
    let return_str = "";
    
    const decipher = crypto.createDecipheriv(algorithm, key, iv);
    // 新增这一行关闭默认PKCS7填充校验
    decipher.setAutoPadding(false);
    let decrypted_data = decipher.update(tradeinfo, "hex", "utf-8");
    
    decrypted_data += decipher.final("utf-8");
   
    return_str = strippadding(decrypted_data);

    return return_str;
}

修改后运行代码即可得到你预期的解密结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:06:02