首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是与赏金城堡的PaddedBufferedBlockCipher的AESEngine和PKCS7填充等价的密码?

什么是与赏金城堡的PaddedBufferedBlockCipher的AESEngine和PKCS7填充等价的密码?
EN

Stack Overflow用户
提问于 2017-02-28 10:38:03
回答 2查看 1.5K关注 0票数 2

我想用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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-28 19:49:56

如果你用一个分组密码加密什么东西,你需要

  • 该分组密码可以接受单个输入块并将其损坏为单个输出块(对于AES,块大小为16字节),
  • 使您能够以结构化方式加密多个块的操作模式。
  • 填充,使您可以加密的东西,不完全是一个倍数的块大小。

您所展示的PaddedBufferedBlockCipher只有两个。操作模式被暗示为ECB模式,因为它只是将分组密码分别应用于每个块。

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

代码语言:javascript
复制
var decipher = crypto.createDecipheriv('aes-xxx-ecb', key, '');

xxx交换为您的密钥的大小(以位为单位)。有效大小分别为128位、192位和256位。其他的都不行。此外,确保您正确地编码您的密钥。

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

其他考虑因素:

从不使用 ECB mode。它是确定性的,因此在语义上不安全。您至少应该使用像CBCCTR这样的随机模式。最好对密文进行身份验证,这样就不可能发生像padding oracle attack这样的攻击。这可以通过GCM或EAX等经过身份验证的模式完成,也可以使用encrypt-then-MAC方案来完成。

票数 1
EN

Stack Overflow用户

发布于 2017-02-28 16:24:19

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42506429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档