gpt4 book ai didi

node.js - 从 ColdFusion 加密解密 NodeJS 中的 AES/CBC/PKCS5Padding

转载 作者:行者123 更新时间:2023-12-03 12:17:47 32 4
gpt4 key购买 nike

我正在将 nodeJS 应用程序与 ColdFusion 应用程序合并。我使用以下方法在 ColdFusion 中进行了加密,其中 key 是加密 key 字符串

key = 'nQw7y6QejwGFh/SNrul20Q=='
encrypt(value, key, "AES/CBC/PKCS5Padding", "HEX");
然后,在 NodeJS 中,我尝试使用加密来解密它
const crypto = require('crypto');

const key = "nQw7y6QejwGFh/SNrul20Q==";
const binaryEncryptionKey = new Buffer( key, "base64" );

decrypt = (value) => {
try {
var decipher = crypto.createDecipheriv( "AES-128-CBC", binaryEncryptionKey );
var value = (
decipher.update( value, "base64", "utf8" ) +
decipher.final( "utf8" )
);
return value;
} catch (err) {
console.log(err);
}
}
它首先为缓冲区返回警告:
DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
然后,我得到了错误:
TypeError [ERR_INVALID_ARG_TYPE]: The "iv" argument must be of type string or an instance of Buffer, TypedArray, or DataView. Received undefined
我没有“iv”,因为 ColdFusion 端没有使用它来加密。是否可以在 NodeJS 中解密它?
  • 当我更改为 Buffer.alloc 时,出现错误:
  • TypeError [ERR_INVALID_ARG_TYPE]: The "size" argument must be of type number. Received type string ('nQw7y6QejwGFh/SNrul20Q==..)
    例如,我有以下加密字符串: FB391CAAE5CD8FF47C55211ED8636D213C95F233B615D4E56CB7CD6B051D01DF356E1C45ED7AABAB5F9BCBB9EED6355B谢谢

    最佳答案

    ColdFusion encrypt功能描述 here . AES/CBC 所需的 16 字节 IV 可以明确指定。如果没有给出 IV,它会自动生成并放在密文前面(同样是 Michael Fehr 的评论)。 NodeJS中的解密可以如下进行:

    const crypto = require('crypto');

    const key = Buffer.from('nQw7y6QejwGFh/SNrul20Q==', 'base64');
    const ivCiphertext = Buffer.from('FB391CAAE5CD8FF47C55211ED8636D213C95F233B615D4E56CB7CD6B051D01DF356E1C45ED7AABAB5F9BCBB9EED6355B', 'hex');
    const iv = ivCiphertext.slice(0, 16);
    const ciphertext = ivCiphertext.slice(16);

    var decrypt = (value) => {
    try {
    var decipher = crypto.createDecipheriv('AES-128-CBC', key, iv);
    var value =
    decipher.update(value, '', 'utf8') +
    decipher.final('utf8');
    return value;
    } catch (err) {
    console.log(err);
    }
    }

    console.log(decrypt(ciphertext)); // 4388576099656673
    结果 4388576099656673 , 与相应的 ColdFusion 脚本一致,可以执行例如 here ,S。例子:
    <cfscript>
    key = 'nQw7y6QejwGFh/SNrul20Q==';
    iv = BinaryDecode('FB391CAAE5CD8FF47C55211ED8636D21', 'HEX');
    ciphertext = '3C95F233B615D4E56CB7CD6B051D01DF356E1C45ED7AABAB5F9BCBB9EED6355B';
    plaintext = decrypt(ciphertext, key, 'AES/CBC/PKCS5Padding', 'HEX', iv);
    writeOutput(plaintext);
    </cfscript>
    请注意 new Buffer() 已弃用。 Buffer.alloc()的说明可以找到 here .

    关于node.js - 从 ColdFusion 加密解密 NodeJS 中的 AES/CBC/PKCS5Padding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63962545/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com