Node.js bouncycastle';的等效密码是什么;带AESENGE和PKCS7填充的s PaddedBufferedBlockCipher?

Node.js bouncycastle';的等效密码是什么;带AESENGE和PKCS7填充的s PaddedBufferedBlockCipher?,node.js,encryption,openssl,cryptography,bouncycastle,Node.js,Encryption,Openssl,Cryptography,Bouncycastle,我想用nodejs解密AES-256加密字符串。我正在使用加密模块 字符串使用Bouncy castle java库进行加密。在Java中,密码的初始化使用: PaddedBufferedBlockCipher cipher=新的PaddedBufferedBlockCipher(新AESENGE(),新的PKCS7Padding()) nodejs模块使用openssl的密码列表对其进行初始化,如: var decipher=crypto.createDecipher('aes-256-cbc

我想用nodejs解密AES-256加密字符串。我正在使用加密模块

字符串使用Bouncy castle java库进行加密。在Java中,密码的初始化使用:

PaddedBufferedBlockCipher cipher=新的PaddedBufferedBlockCipher(新AESENGE(),新的PKCS7Padding())

nodejs模块使用openssl的密码列表对其进行初始化,如:

var decipher=crypto.createDecipher('aes-256-cbc',密钥)

我应该使用哪种算法

以下是可供选择的算法列表:

-bash-4.1$openssl列表密码算法| grep AES-256
AES-256-CBC
AES-256-CFB
AES-256-CFB1
AES-256-CFB8
AES-256-CTR
AES-256-ECB
AES-256-OFB
AES-256-XTS
AES256=>AES-256-CBC

aes256=>AES-256-CBC
使用
AES-256-ECB
解密数据(我看不到任何CBC或其他模式)


调用
decipher.setAutoPadding(true)
以使用PKCS填充。

如果使用分组密码加密某些内容,则需要

  • 一种分组密码,它可以接受单个输入块并将其转换为单个输出块(对于AES,块大小为16字节)
  • 使您能够以结构化方式加密多个块的操作模式
  • 使您能够加密长度不完全等于块大小倍数的内容的填充
您显示的
PaddedBufferedBlockCipher
只有两个。操作模式暗示为ECB模式,因为它只是将分组密码分别应用于每个块

您将在node.js中获得与以下相同的行为:

var decipher = crypto.createDecipheriv('aes-xxx-ecb', key, '');
xxx
交换密钥的大小(以位为单位)。有效大小为128位、192位和256位。其他一切都不行。此外,请确保密钥的编码正确

如果您想知道为什么这里使用
createDecipheriv
而不是
createDecipher
,我建议您仔细地将文档与这两个函数进行比较
createDecipher
需要密码而不是密钥


其他考虑:


切勿使用。它是确定性的,因此在语义上不安全。您至少应该使用随机模式,如或。最好是对密文进行身份验证,这样就不可能进行类似的攻击。这可以通过认证模式(如GCM或EAX)或方案来完成。

感谢您的解释。在发现ECB不接受任何IV,并且
createDecipher(算法,密码)
根据密码创建自己的密钥后,我用同样的方法解决了这个问题。