从ColdFusion加密解密NodeJS中的AES / CBC / PKCS5Padding

myTest532 myTest532

我正在将nodeJS应用程序与ColdFusion应用程序合并。我使用以下方法在ColdFusion中进行了加密,其中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

谢谢

托帕可

这里encrypt描述ColdFusion函数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脚本一致,例如,可以在此处执行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()可在此处找到

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AES / CBC / PKCS5Padding与AES / CBC / PKCS7Padding具有256键大小的性能Java

来自分类Dev

用Java加密/解密“ AES / ECB / PKCS5Padding”

来自分类Dev

Android / Java AES 256 CBC与PHP中的PKCS5Padding解密

来自分类Dev

将文本加密为AES / CBC / PKCS7Padding

来自分类Dev

从Java到PHP的带有SecretKey的AES CBC PKCS5Padding

来自分类Dev

所有类型的Android设备均可使用AES / CBC / PKCS5Padding加密解密算法和SHA-1哈希算法吗

来自分类Dev

AES / cbc / pkcs5padding加密IOS

来自分类Dev

使用CryptoJS解密AES / CBC / PKCS5Padding

来自分类Dev

使用PKCS7Padding进行AES CBC加密在Java和Objective-C中具有不同的结果

来自分类Dev

Java AES / CBC / PKCS5填充流加密性能与未加密相比

来自分类Dev

Java使用aes256 / CBC / PKCS7Padding加密文件

来自分类Dev

无法复制从Java到PHP中使用AES / ECB / PKCS5Padding加密方法

来自分类Dev

C#中的Java AES / CBC / PKCS5Padding

来自分类Dev

如何在dart中使用AES CBC 256位和PKCS5Padding进行加密和解密以及如何检索参数

来自分类Dev

在iOS中使用AES / CBC / PKCS7Padding 128位算法在Android中加密的解密字符串的问题

来自分类Dev

在Dart中解密AES / CBC / PKCS5Padding加密

来自分类Dev

Flutter / Dart AES-256-CBC从PHP中的加密解密

来自分类Dev

AES / CBC / NoPadding加密和解密

来自分类Dev

为什么我收到javax.crypto.BadPaddingException(AES / CBC / PKCS5Padding)

来自分类Dev

PHP中的AES / CBC / PKCS#5加密算法

来自分类Dev

用Java加密/解密“ AES / ECB / PKCS5Padding”

来自分类Dev

Android / Java AES 256 CBC与PHP中的PKCS5Padding解密

来自分类Dev

如何使用Objective-c实现AES PKCS5Padding

来自分类Dev

Ruby中的Coldfusion“ AES / CBC / PKCS5Padding”解密

来自分类Dev

使用PKCS7Padding进行AES CBC加密在Java和Objective-C中具有不同的结果

来自分类Dev

Java AES / CBC / PKCS5填充流加密性能与未加密相比

来自分类Dev

AES 256 位 CBC PKCS#5 在 Python 中加密/解密

来自分类Dev

使用 AES/CBC/PKCS7Padding 加密/解密

来自分类Dev

使用 AES/ECB/NoPadding 与 PKCS5Padding 进行加密

Related 相关文章

  1. 1

    AES / CBC / PKCS5Padding与AES / CBC / PKCS7Padding具有256键大小的性能Java

  2. 2

    用Java加密/解密“ AES / ECB / PKCS5Padding”

  3. 3

    Android / Java AES 256 CBC与PHP中的PKCS5Padding解密

  4. 4

    将文本加密为AES / CBC / PKCS7Padding

  5. 5

    从Java到PHP的带有SecretKey的AES CBC PKCS5Padding

  6. 6

    所有类型的Android设备均可使用AES / CBC / PKCS5Padding加密解密算法和SHA-1哈希算法吗

  7. 7

    AES / cbc / pkcs5padding加密IOS

  8. 8

    使用CryptoJS解密AES / CBC / PKCS5Padding

  9. 9

    使用PKCS7Padding进行AES CBC加密在Java和Objective-C中具有不同的结果

  10. 10

    Java AES / CBC / PKCS5填充流加密性能与未加密相比

  11. 11

    Java使用aes256 / CBC / PKCS7Padding加密文件

  12. 12

    无法复制从Java到PHP中使用AES / ECB / PKCS5Padding加密方法

  13. 13

    C#中的Java AES / CBC / PKCS5Padding

  14. 14

    如何在dart中使用AES CBC 256位和PKCS5Padding进行加密和解密以及如何检索参数

  15. 15

    在iOS中使用AES / CBC / PKCS7Padding 128位算法在Android中加密的解密字符串的问题

  16. 16

    在Dart中解密AES / CBC / PKCS5Padding加密

  17. 17

    Flutter / Dart AES-256-CBC从PHP中的加密解密

  18. 18

    AES / CBC / NoPadding加密和解密

  19. 19

    为什么我收到javax.crypto.BadPaddingException(AES / CBC / PKCS5Padding)

  20. 20

    PHP中的AES / CBC / PKCS#5加密算法

  21. 21

    用Java加密/解密“ AES / ECB / PKCS5Padding”

  22. 22

    Android / Java AES 256 CBC与PHP中的PKCS5Padding解密

  23. 23

    如何使用Objective-c实现AES PKCS5Padding

  24. 24

    Ruby中的Coldfusion“ AES / CBC / PKCS5Padding”解密

  25. 25

    使用PKCS7Padding进行AES CBC加密在Java和Objective-C中具有不同的结果

  26. 26

    Java AES / CBC / PKCS5填充流加密性能与未加密相比

  27. 27

    AES 256 位 CBC PKCS#5 在 Python 中加密/解密

  28. 28

    使用 AES/CBC/PKCS7Padding 加密/解密

  29. 29

    使用 AES/ECB/NoPadding 与 PKCS5Padding 进行加密

热门标签

归档