Java RSAPublicKey工厂异常

时间:2018-04-24 16:20:04

标签: java exception rsa public-key

将Java升级到1.8.0_171后,我总是在RSA公钥组合期间遇到以下异常:

java.security.InvalidKeyException: exponent is larger than modulus

它在升级前工作,有人知道该怎么做吗?

RSAPublicKeySpec publicSpec = new RSAPublicKeySpec(new BigInteger(modulus), new BigInteger(exponent));
KeyFactory factory = KeyFactory.getInstance("RSA");
PublicKey pub = factory.generatePublic(publicSpec); <----- EXCEPTION

1 个答案:

答案 0 :(得分:1)

我发现JDK-8174756引用的Java从1.8.0_161发生了变化:

  

RSA公钥验证在8u161中,   SunRsaSign提供程序中的RSA实现将拒绝任何RSA   指数不在有效范围内的公钥   由PKCS#1版本2.2定义。此更改将影响JSSE   连接以及在JCE上构建的应用程序。

这基本上意味着模数不应该是负的。 在这种情况下,以下列方式构建BigInteger是积极的:

BigInteger(1, modulus)
BigInteger(1, exponent)

在更改之后,它再次有效。