我想实现RSA algorithm来加密图像(byte[]
)。为了生成两个密钥,我使用了这段代码:
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的密码学)的一些细节。
您发布的内容没有任何意义,因为getPublicKey()和getPrivateKey()完全返回您所需要的内容。但是,如果要提取组件,则只需将PublicKey和PrivateKey转换为RSAPublicKey和RSAPrivateKey,而不要经历使用KeySpecs的繁琐过程。
而且,您很快就会发现,无法在计划中使用RSA加密大于501字节的内容,对于图像几乎没有用。
您可以使用Key.getEncoded()获取密钥的字节。