我有5个CRT组件 - primeP,primeQ,primeExponentP,primeExponentQ和crtCoefficient。有没有办法从这些生成RSA密钥对?
当我查看RSAPrivateCrtKeySpec和RSAPublicKeySpec时,缺少的参数是modulus,privateExponent和publicExponent。
有人可以帮我如何计算模数,privateExponent和publicExponent吗?
是否有一个Bouncy Castle实现这样做?
谢谢! 萨姆
答案 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。