如何从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);