Java - 从5个CRT组件生成RSA密钥对

时间:2016-01-21 19:11:52

标签: java cryptography rsa bouncycastle

我有5个CRT组件 - primeP,primeQ,primeExponentP,primeExponentQ和crtCoefficient。有没有办法从这些生成RSA密钥对?

当我查看RSAPrivateCrtKeySpec和RSAPublicKeySpec时,缺少的参数是modulus,privateExponent和publicExponent。

有人可以帮我如何计算模数,privateExponent和publicExponent吗?

是否有一个Bouncy Castle实现这样做?

谢谢! 萨姆

2 个答案:

答案 0 :(得分:1)

是的,这应该是可能的。除非公众指数真的很大,但这不太可能。

你可能猜测(即尝试3,5,7,13,17和65537)或暴力强迫公共指数 - 因为它通常是一个小素数。 65537值(0x010001,第四个费马素数)最有可能。然后你可以calculate the private exponent。您可以使用密钥对使用sign / verify验证您的猜测。

请注意,确实有CRT参数而不是公钥有点奇怪。实际上,你可能需要自己编写代码,这太奇怪了。

答案 1 :(得分:0)

只为CRT规范中缺少的参数提供空值。关键工厂将解决这个问题。

RSAPrivateCrtKeySpec privateSpec = new RSAPrivateCrtKeySpec(null, null, null, p, q, expP, expQ, coeff);
KeyFactory factory = KeyFactory.getInstance("RSA");
privateKey = (RSAPrivateKey)factory.generatePrivate(privateSpec);

模数是primeP * primeQ。在大多数情况下,公共指数是65537。