2009-05-19 137 views
7

有沒有辦法生成適合使用Sun的keytool程序進行加密的128位密鑰對?似乎http://java.sun.com/javase/6/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator中的算法不支持或不允許短於512位的密鑰。使用keytool生成128位密鑰

密鑰對將與ff一起使用。代碼段:

Security.addProvider(new BouncyCastleProvider()); 

KeyStore keyStore = KeyStore.getInstance("PKCS12"); 

FileInputStream keyStoreSource = new FileInputStream("keystore"); 

try { 
    keyStore.load(keyStoreSource, "password".toCharArray()); 
} finally { 
    keyStoreSource.close(); 
} 

String alias = (String) keyStore.aliases().nextElement(); 
PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, "password".toCharArray()); 
X509Certificate certificate = (X509Certificate) keyStore.getCertificate(alias); 

CMSEnvelopedDataStreamGenerator generator = new CMSEnvelopedDataStreamGenerator(); 

generator.addKeyTransRecipient(certificate); 

OutputStream output2 = generator.open(output, CMSEnvelopedDataGenerator.AES128_CBC, BouncyCastleProvider.PROVIDER_NAME); 

try { 
    IOUtils.copy(input, output2); 
} finally { 
    output2.close(); 
    output.close(); 
} 

其中輸出是一些爲OutputStream其中的加密數據將被保存,輸入是一些的InputStream其中明文數據將被讀取。

回答

0

這將是有意義的,短於512位密鑰對不能生成。與對稱密鑰密碼術相比,公鑰密碼系統需要更長的密鑰才能維持相同的安全級別。公鑰密碼不建議使用128位密鑰對。

+0

我一直在尋找生成測試證書的AES-128使用。那麼我錯了嗎? – 2009-05-19 10:10:10

+1

你能否詳細解釋一下你想完成的事情? – 2009-05-19 11:39:26

2

證書用於公鑰加密,並且不包含對稱分組密碼AES-128的加密密鑰。相反,公鑰密碼術僅用於加密或協商128位AES密鑰,而對話的其餘部分使用AES。

128位AES密鑰不是證書,它只是來自密碼強的隨機數生成器的128位或使用散列算法(如PBKDF2)的密碼派生的密鑰。你如何得到這些位取決於你的應用程序。 SSL/TLS必須協商一個隨機密鑰,但硬盤加密程序會從密碼中派生密鑰。

5

你只需要指定不同的storetype

keytool -genseckey -alias check2 -keyalg AES -keysize 128 -storepass changeit -storetype JCEKS -keystore ks.jck