我想用nodejs解密AES-256加密字符串。我正在使用密码模块。
该字符串使用库进行加密。在Java中,密码使用:
PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new AESEngine(), new PKCS7Padding());
nodejs的crypto模块使用openssl的密码列表来实现加密,例如:
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
发布于 2017-02-28 19:49:56
如果你用一个分组密码加密什么东西,你需要
您所展示的PaddedBufferedBlockCipher只有两个。操作模式被暗示为ECB模式,因为它只是将分组密码分别应用于每个块。
在node.js中,您将得到相同的行为:
var decipher = crypto.createDecipheriv('aes-xxx-ecb', key, '');将xxx交换为您的密钥的大小(以位为单位)。有效大小分别为128位、192位和256位。其他的都不行。此外,确保您正确地编码您的密钥。
如果您想知道为什么这里使用createDecipheriv而不是createDecipher,我建议您仔细地将文档与这两个函数进行比较。createDecipher需要一个密码,而不是一个密钥。
其他考虑因素:
从不使用 ECB mode。它是确定性的,因此在语义上不安全。您至少应该使用像CBC或CTR这样的随机模式。最好对密文进行身份验证,这样就不可能发生像padding oracle attack这样的攻击。这可以通过GCM或EAX等经过身份验证的模式完成,也可以使用encrypt-then-MAC方案来完成。
发布于 2017-02-28 16:24:19
用AES-256-ECB解密数据(我没有看到任何CBC或其他模式)。
调用decipher.setAutoPadding(true)使用PKCS填充。
https://stackoverflow.com/questions/42506429
复制相似问题