如何从RSA密码系统的私钥对象java.security.PublicKey中获取相关的公钥对象java.security.PrivateKey

最佳答案

Java能够通过使用模数和指数来创建公钥:

RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, exponent);
kf.generatePublic(keySpec);


因此,我们需要从私钥中提取以下值:

KeyFactory kf = KeyFactory.getInstance("RSA");
RSAPrivateKeySpec priv = kf.getKeySpec(privateKey, RSAPrivateKeySpec.class);


现在,RSAPrivateKeySpec -Object包含我们需要的模数,但是指数不是我们需要的公钥。

对于公钥,指数通常为65537:
http://en.wikipedia.org/wiki/65537_(number)

因此,我们现在可以创建公钥:

KeyFactory kf = KeyFactory.getInstance("RSA");
RSAPrivateKeySpec priv = kf.getKeySpec(privateKey, RSAPrivateKeySpec.class);

RSAPublicKeySpec keySpec = new RSAPublicKeySpec(priv.getModulus(), BigInteger.valueOf(65537));

PublicKey publicKey = kf.generatePublic(keySpec);

10-01 01:59