将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
答案 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)
在更改之后,它再次有效。