2010-04-06 91 views
7

測試RSA以加密AES密鑰,I realized RSA只有一個有限大小的塊(由程序員設置)存儲加密的密鑰。 的問題是,當我使用:Java中的AES密鑰大小

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

的AES密鑰將在每一個計算機和JVM實現一定的大小?

回答

11

KeyGenerator中有一個init方法,允許您指定位數。

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

這會做你需要的嗎?

默認appears爲128位,但我不會假設所有JVM都使用相同的默認值,或者它始終是默認值。

+0

我同意不取決於默認值。 (其他Java默認值隨時間而改變)另外,值得注意的是,'.init()'唯一有效值爲128,192或256位,並且192和256甚至可能不可用......可能會導致一些痛苦的部署樂趣。 – 2011-08-24 11:56:57

2

Suns Java Cryptography Extension documentation指出AES密鑰支持多種密鑰大小,並且不提供有關默認大小的任何信息。

根據不同版本的Sun JVM使用的轄區文件,密鑰的最大大小也可能有所不同。

+0

這是不好的..所以我不能只設置大小並beleave它將在任何地方工作正常.. – 2010-04-06 14:25:01

+0

大小也可以限制,取決於管轄權設置。 – BenM 2010-04-06 14:28:33

+0

它看起來像AES始終可以是128位(16字節) – 2010-04-06 14:52:04

0

KeyGenerator有幾個init()方法;您應該在生成密鑰之前調用其中的一個。 Javadoc KeyGenerator指定如果您不調用init()方法之一,則「每個提供程序必須提供(並記錄)默認初始化。」

所以這是提供商特定的。由於您使用「AES」算法名稱初始化密鑰生成器,因此可以假定您將獲得適合AES的密鑰,即128,192或256位(分別爲16,24和32字節)。但是你得到的是實際的提供者,這可能取決於JVM以及可能的配置。

0

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)