与 bouncycastle 的 PpadBufferedBlockCipher 的 AESEngine 和 PKCS7 填充的等效密码是什么?



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

使用弹性城堡Java库加密字符串。在Java中,密码是使用:

进行的

PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new AESEngine(), new PKCS7Padding());

crypto nodejs的模块使用openssl的密码列表进行INTIALITIAL,例如:

var decipher = crypto.createDecipher('aes-256-cbc',key);

我应该使用哪种算法?

这是要选择的算法列表:

-bash-4.1$ openssl list-cipher-algorithms|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,块大小为16个字节),
  • 使您能够以结构化的方式加密多个块的操作方式
  • 填充物使您能够加密某些不如块大小的倍数。

您显示的PaddedBufferedBlockCipher只有两个。该操作模式暗示为欧洲央行模式,因为它仅包括将块密码分别应用于每个块。

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

var decipher = crypto.createDecipheriv('aes-xxx-ecb', key, '');

xxx交换为键的大小。有效尺寸为128位,192位和256位。其他一切都无法正常工作。另外,请确保正确地对密钥的编码进行了正确的编码。

如果您想知道为什么在这里使用createDecipheriv而不是createDecipher,我建议您将文档与这两个功能仔细比较。createDecipher期望密码,而不是密钥。


其他注意事项:

切勿使用ECB模式。这是确定性的,因此在语义上没有安全。您至少应该使用CBC或CTR等随机模式。最好对您的密文进行身份验证,以便不可能进行攻击。这可以使用经过验证的模式(例如GCM或EAX),也可以使用加密-AC方案进行。

AES-256-ECB解密数据(我看不到任何CBC或其他模式。)。

致电decipher.setAutoPadding(true)使用PKCS填充。

最新更新