首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >256位密钥的Java AES算法

256位密钥的Java AES算法
EN

Stack Overflow用户
提问于 2020-04-13 17:46:14
回答 1查看 572关注 0票数 2

我正在尝试实现AES 256位加密/解密算法。我意识到这种算法有多种模式。

https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html

代码语言:javascript
复制
Every implementation of the Java platform is required to support the following standard Cipher transformations with the keysizes in parentheses:
AES/CBC/NoPadding (128)
AES/CBC/PKCS5Padding (128)
AES/ECB/NoPadding (128)
AES/ECB/PKCS5Padding (128)
DES/CBC/NoPadding (56)
DES/CBC/PKCS5Padding (56)
DES/ECB/NoPadding (56)
DES/ECB/PKCS5Padding (56)
DESede/CBC/NoPadding (168)
DESede/CBC/PKCS5Padding (168)
DESede/ECB/NoPadding (168)
DESede/ECB/PKCS5Padding (168)
RSA/ECB/PKCS1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)

但是在上面,我没有找到任何有256位键的模式。我有弄错什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-13 18:40:21

AES是128位分组密码,具有128、196和256位密钥大小.AES是原始的,这需要一个操作方式才能成为一个加密方案。每种操作模式都接受任何密钥大小,而操作模式与密钥大小无关。

要使用任何模式操作,首先需要实现AES,然后是操作模式。根据操作模式的不同,可能只需要AES的加密或解密。

某些运作方式

  • 欧洲央行忘记了它是不安全的,参见维基百科中的欧洲央行企鹅
  • 如果在服务器中使用CBC模式,则容易受到填充oracle攻击的攻击。在CBC模式下的Nonce应该是唯一的,并且是不可预测的。
  • CTR模式将分组密码转换为流密码,不需要AES的解密。只有加密实现是足够的。在CTR模式下,每个密钥只能使用一次,否则由于婴儿床拖曳攻击。而导致机密性失败。

所有这些都是一种古老的操作模式,如果使用得当,它们只能提供机密性。

在现代密码学中,我们更喜欢通过身份验证的加密(带有关联数据)模式,比如AES-GCM。这些模式不仅提供了机密性,而且提供了完整性和身份验证。

在GCM模式中,由于GCM内部使用CTR模式,并且继承了CTR模式的相同问题,因此必须小心IV/Nonce生成,因此永远不要在相同的密钥下使用相同的IV。我们可以通过使用计数器/LFSR或在随机组合模式中解决这个问题。

而且,GCM中的IV重用可能会导致伪造的灾难性后果。

对于IV重用问题,在不久的将来还有另一种模式正在成为一种标准,即SIV模式;AES-GCM-SIV

甲骨文和IBM的Java密码都有限制为128位密钥大小。这就是为什么你在那里看到128个。自2017年8u151以来,这一模式发生了变化。OpenJDK或BouncyCastle不受限制。

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

https://stackoverflow.com/questions/61193583

复制
相关文章

相似问题

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