测试RSA以加密AES密钥,I realized RSA只有一个有限大小的块(由程序员设置)存储加密的密钥。 的问题是,当我使用:Java中的AES密钥大小
KeyGenerator.getInstance("AES").generateKey()
的AES密钥将在每一个计算机和JVM实现一定的大小?
测试RSA以加密AES密钥,I realized RSA只有一个有限大小的块(由程序员设置)存储加密的密钥。 的问题是,当我使用:Java中的AES密钥大小
KeyGenerator.getInstance("AES").generateKey()
的AES密钥将在每一个计算机和JVM实现一定的大小?
KeyGenerator中有一个init方法,允许您指定位数。
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey key = keyGenerator.generateKey();
这会做你需要的吗?
默认appears为128位,但我不会假设所有JVM都使用相同的默认值,或者它始终是默认值。
Suns Java Cryptography Extension documentation指出AES密钥支持多种密钥大小,并且不提供有关默认大小的任何信息。
根据不同版本的Sun JVM使用的辖区文件,密钥的最大大小也可能有所不同。
这是不好的..所以我不能只设置大小并beleave它将在任何地方工作正常.. – 2010-04-06 14:25:01
大小也可以限制,取决于管辖权设置。 – BenM 2010-04-06 14:28:33
它看起来像AES始终可以是128位(16字节) – 2010-04-06 14:52:04
KeyGenerator
有几个init()
方法;您应该在生成密钥之前调用其中的一个。 Javadoc KeyGenerator
指定如果您不调用init()
方法之一,则“每个提供程序必须提供(并记录)默认初始化。”
所以这是提供商特定的。由于您使用“AES”算法名称初始化密钥生成器,因此可以假定您将获得适合AES的密钥,即128,192或256位(分别为16,24和32字节)。但是你得到的是实际的提供者,这可能取决于JVM以及可能的配置。
https://docs.oracle.com/javase/7/docs/api/javax/crypto/Cipher.html
Java平台的每一个执行需要支持与keysizes以下标准密码转换括号:
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)
我同意不取决于默认值。 (其他Java默认值随时间而改变)另外,值得注意的是,'.init()'唯一有效值为128,192或256位,并且192和256甚至可能不可用......可能会导致一些痛苦的部署乐趣。 – 2011-08-24 11:56:57