Java中的AES密钥大小

时间:2010-04-06 14:11:46

标签: java encryption aes

测试RSA以加密AES密钥,I realized RSA只有一个块,其大小有限(可由程序员设置)确实存储加密密钥。 问题是,当我使用时:

KeyGenerator.getInstance("AES").generateKey()

每个计算机和jvm实现中AES密钥的大小是否恒定?

4 个答案:

答案 0 :(得分:12)

KeyGenerator中有一个init方法,允许您指定位数。

KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey key = keyGenerator.generateKey();

这会做你需要的吗?

默认appears为128位,但我不认为所有JVM都使用相同的默认值,或者它始终是默认值。

答案 1 :(得分:2)

Suns Java Cryptography Extension documentation表示AES密钥支持多种密钥大小,并且不提供有关默认大小的任何信息。

根据不同版本的Suns JVM使用的管辖区文件,密钥的最大大小也会有所不同。

答案 2 :(得分:0)

KeyGenerator有多种init()方法;你应该在生成密钥之前调用其中一个。 KeyGenerator的Javadoc指定如果您不调用其中一个init()方法,则“每个提供程序必须提供(并记录)默认初始化。”

所以这是特定于提供者的。由于使用“AES”算法名称初始化密钥生成器,可以假设您将获得具有适合AES的大小的密钥,即128,192或256位(分别为16,24和32字节)。但是你得到的是实际的提供者,这可能取决于JVM及其配置。

答案 3 :(得分:0)

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

Java平台的每个实现都需要支持以下标准Cipher转换,并在括号中包含密钥:

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)