我正在尝试实现AES 256位加密/解密算法。我意识到这种算法有多种模式。
https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html
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位键的模式。我有弄错什么吗?
发布于 2020-04-13 18:40:21
AES是128位分组密码,具有128、196和256位密钥大小.AES是原始的,这需要一个操作方式才能成为一个加密方案。每种操作模式都接受任何密钥大小,而操作模式与密钥大小无关。
要使用任何模式操作,首先需要实现AES,然后是操作模式。根据操作模式的不同,可能只需要AES的加密或解密。
某些运作方式
所有这些都是一种古老的操作模式,如果使用得当,它们只能提供机密性。
在现代密码学中,我们更喜欢通过身份验证的加密(带有关联数据)模式,比如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不受限制。
https://stackoverflow.com/questions/61193583
复制相似问题