2010-04-25 146 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字节的任何内容,对于图像几乎没有用处。