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

NodeJS解密ColdFusion AES/CBC/PKCS5Padding加密内容问题

解决Node.js解密ColdFusion AES加密内容的问题

当然可以解密!咱们一步步修正你的代码,搞定遇到的所有问题:

问题核心梳理

首先得搞清楚ColdFusion encrypt() 函数在你的调用参数下的隐性行为:

  • 当使用 AES/CBC/PKCS5Padding 且未显式指定IV时,ColdFusion会默认使用16字节的全0 IV(AES-128的块大小固定为16字节)
  • 你生成的密文是HEX编码,所以Node.js解码时必须对应使用hex作为输入编码
  • 你的Buffer用法不符合当前Node.js规范,需要替换为官方推荐的方法

修正后的完整代码

const crypto = require('crypto');
const key = "nQw7y6QejwGFh/SNrul20Q==";
// 用Buffer.from替代废弃的new Buffer,正确解码base64格式的密钥
const binaryEncryptionKey = Buffer.from(key, "base64");
// ColdFusion默认使用16字节全0的IV,这里生成对应Buffer
const iv = Buffer.alloc(16, 0); 

const decrypt = (encryptedHex) => {
  try {
    // 创建Decipheriv实例,必须传入算法、密钥、IV三个参数
    const decipher = crypto.createDecipheriv("AES-128-CBC", binaryEncryptionKey, iv);
    // 密文是HEX编码,所以输入编码设为hex,输出指定为utf8
    let decrypted = decipher.update(encryptedHex, "hex", "utf8");
    decrypted += decipher.final("utf8");
    return decrypted;
  } catch (err) {
    console.error('解密失败:', err);
    return null;
  }
}

// 测试你提供的示例密文
const sampleCiphertext = "FB391CAAE5CD8FF47C55211ED8636D213C95F233B615D4E56CB7CD6B051D01DF356E1C45ED7AABAB5F9BCBB9EED6355B";
console.log(decrypt(sampleCiphertext));

关键修正点说明

  • Buffer弃用问题解决:把new Buffer(key, "base64")替换为Buffer.from(key, "base64"),这是Node.js官方明确推荐的替代方案,彻底消除弃用警告
  • IV参数补充:ColdFusion不会省略IV,只是默认用了全0的16字节IV,所以Node.js必须传入这个参数,否则会触发参数类型错误
  • 密文编码匹配:你的示例密文是HEX格式,所以decipher.update的输入编码要设为hex,而不是之前错误的base64,这是解密成功的核心前提

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 13:02:32