2010-04-25 147 views
2

我想實現RSA algorithm來加密圖像(byte[])。爲了產生我的兩個鍵我使用這段代碼:在Java中實現RSA算法

KeyPairGenerator keygen = KeyPairGenerator.getInstance("RSA"); 
keygen.initialize(512); 
keyPair = keygen.generateKeyPair(); 

一旦公鑰和私鑰生成,我想向他們展示給用戶,因此他可以分發的公鑰和使用私鑰來解碼。我該如何取回這些鑰匙?

使用keygen.getPrivateKey()keygen.getPublicKey()給我所有關於RSA算法的信息,不僅僅是我需要的密鑰。

感謝

回答

4

通過相關KeySpec類,你可以調用getModulus()和getPublicExponent()/ getPrivateExponent()方法來拔出鑰匙組件:

KeyFactory fact = KeyFactory.getInstance("RSA"); 
RSAPublicKeySpec pub = fact.getKeySpec(kp.getPublic(), 
    RSAPublicKeySpec.class); 
RSAPrivateKeySpec priv = fact.getKeySpec(kp.getPrivate(), 
    RSAPrivateKeySpec.class); 

saveToFile("public.key", pub.getModulus(), 
    pub.getPublicExponent()); 
saveToFile("private.key", priv.getModulus(), 
    priv.getPrivateExponent()); 

在情況下,它是非常有用的,我寫了幾篇文章,回頭討論了RSA encryption in Java(以及基於Java的密碼學的一些細節)。

+0

非常感謝,你的文章幫了我很多。 – 2010-04-26 17:20:45

0

你發佈的內容自從getPublicKey()和getPrivateKey()之後沒有任何意義,完全回報你說你需要的東西。然而,如果你想提取組件,你應該簡單地將你的PublicKey和PrivateKey強制轉換爲RSAPublicKey和RSAPrivateKey,而不是通過使用KeySpecs的方式。

此外,您很快就會發現,使用RSA與您的計劃無法加密大於501字節的任何內容,對於圖像幾乎沒有用處。