在Java中实施RSA算法

问题描述 投票:2回答:3

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

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

一旦生成了公钥和私钥,我想向用户展示它们,以便他可以分发公钥并使用私钥进行解码。我如何找回那些钥匙?

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

谢谢

java algorithm key rsa
3个回答
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
投票

您发布的内容没有任何意义,因为getPublicKey()和getPrivateKey()完全返回您所需要的内容。但是,如果要提取组件,则只需将PublicKey和PrivateKey转换为RSAPublicKey和RSAPrivateKey,而不要经历使用KeySpecs的繁琐过程。

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.