用AESEngine和PKCS7填充对bouncycastle的PaddedBufferedBlockCipher的等效密码是什么?
我想用nodejs解密AES-256encryption的string。 我正在使用encryption模块。
该string使用Bouncy城堡java库encryption。 在Java中,密码使用:
PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new AESEngine(), new PKCS7Padding());
nodejs的crypto
模块使用openssl的密码列表来初始化它,如:
var decipher = crypto.createDecipher('aes-256-cbc',key);
我应该使用哪种algorithm?
以下是可供select的algorithm列表:
-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
如果使用分组密码encryption某些东西,则需要
- 分组密码,它可以采取一个单一的input块,并将其转换为一个输出块(对于AES的块大小是16字节),
- 操作模式使您能够以结构化的方式encryption多个数据块
- 该填充使您能够encryption与块大小的倍数不完全相同的内容。
你已经显示的PaddedBufferedBlockCipher
只有两个。 操作模式暗示为ECB模式,因为它只是将分组密码分别应用于每个块。
您将在node.js中获得与以下相同的行为:
var decipher = crypto.createDecipheriv('aes-xxx-ecb', key, '');
以xxx
为单位交换密钥的大小。 有效的大小是128位,192位和256位。 其他一切都不行。 另外,请确保您获得密钥的编码权。
如果你想知道为什么使用createDecipheriv
而不是createDecipher
,我build议你仔细比较这两个函数的文档。 createDecipher
需要密码而不是密钥。
其他考虑:
切勿使用ECB模式 。 这是确定性的,因此不具有语义上的安全性。 您至less应该使用CBC或CTR等随机模式。 authentication你的密文是更好的,所以像填充甲骨文攻击这样的攻击是不可能的。 这可以通过validation模式,如GCM或EAX,或使用encryption后MACscheme来完成。
使用AES-256-ECB
解密数据(我没有看到任何CBC或其他模式)。
调用decipher.setAutoPadding(true)
以使用PKCS填充。