在Java中实现RSA算法

时间:2010-04-25 14:41:38

标签: java algorithm key rsa

我想实现RSA algorithm来加密图片(byte[])。为了生成我的两个键,我使用了这段代码:

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

生成公钥和私钥后,我想将它们显示给用户,以便他可以分发公钥并使用私钥进行解码。我该如何取回这些钥匙?

使用keygen.getPrivateKey()keygen.getPublicKey()向我提供RSA算法的所有信息,而不仅仅是我需要的密钥。

由于

3 个答案:

答案 0 :(得分:4)

通过Relevant 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的加密技术。

答案 1 :(得分:0)

您可以使用Key.getEncoded()来获取密钥的字节。

http://java.sun.com/j2se/1.4.2/docs/api/java/security/Key.html#getEncoded%28%29

答案 2 :(得分:0)

你发布的内容没有任何意义,因为getPublicKey()和getPrivateKey()正好返回你所说的你需要的东西。但是,如果要提取组件,则只需将PublicKey和PrivateKey转换为RSAPublicKey和RSAPrivateKey,而不是通过使用KeySpec的严格规范。

此外,您很快就会发现,在计划中使用RSA无法加密大于501字节的任何内容,对图像几乎无用。