在Java中实现RSA算法
问题描述:
我想实现RSA algorithm来加密图像(byte[]
)。为了产生我的两个键我使用这段代码:在Java中实现RSA算法
KeyPairGenerator keygen = KeyPairGenerator.getInstance("RSA");
keygen.initialize(512);
keyPair = keygen.generateKeyPair();
一旦公钥和私钥生成,我想向他们展示给用户,因此他可以分发的公钥和使用私钥来解码。我该如何取回这些钥匙?
使用keygen.getPrivateKey()
和keygen.getPublicKey()
给我所有关于RSA算法的信息,不仅仅是我需要的密钥。
感谢
答
通过相关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的密码学的一些细节)。
答
您可以使用Key.getEncoded()来获得关键的字节。
http://java.sun.com/j2se/1.4.2/docs/api/java/security/Key.html#getEncoded%28%29
答
你发布的内容自从getPublicKey()和getPrivateKey()之后没有任何意义,完全回报你说你需要的东西。然而,如果你想提取组件,你应该简单地将你的PublicKey和PrivateKey强制转换为RSAPublicKey和RSAPrivateKey,而不是通过使用KeySpecs的方式。
此外,您很快就会发现,使用RSA与您的计划无法加密大于501字节的任何内容,对于图像几乎没有用处。
非常感谢,你的文章帮了我很多。 – 2010-04-26 17:20:45