我想实现RSA algorithm来加密图片(byte[]
)。为了生成我的两个键,我使用了这段代码:
KeyPairGenerator keygen = KeyPairGenerator.getInstance("RSA");
keygen.initialize(512);
keyPair = keygen.generateKeyPair();
生成公钥和私钥后,我想将它们显示给用户,以便他可以分发公钥并使用私钥进行解码。我该如何取回这些钥匙?
使用keygen.getPrivateKey()
和keygen.getPublicKey()
向我提供RSA算法的所有信息,而不仅仅是我需要的密钥。
由于
答案 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字节的任何内容,对图像几乎无用。