use*_*721 2 java rsa exception public-key
将Java升级到1.8.0_171后,我在RSA公钥撰写过程中总是遇到以下异常:
java.security.InvalidKeyException: exponent is larger than modulus
Run Code Online (Sandbox Code Playgroud)
升级前它可以工作,有人知道该怎么办吗?
RSAPublicKeySpec publicSpec = new RSAPublicKeySpec(new BigInteger(modulus), new BigInteger(exponent));
KeyFactory factory = KeyFactory.getInstance("RSA");
PublicKey pub = factory.generatePublic(publicSpec); <----- EXCEPTION
Run Code Online (Sandbox Code Playgroud)
我发现JDK-8174756 引用的Java 1.8.0_161发生了变化:
security-libs/javax.crypto RSA 公钥验证
在 8u161 中,SunRsaSign 提供程序中的 RSA 实现将拒绝任何指数不在 PKCS#1 版本 2.2 定义的有效范围内的 RSA 公钥。此更改将影响 JSSE 连接以及基于 JCE 构建的应用程序。
JDK-8174756(非公开)
这基本上意味着模数不应该为负。在这种情况下,重要的是要BigInteger以下列方式进行积极的构建:
BigInteger(1, modulus)
BigInteger(1, exponent)
Run Code Online (Sandbox Code Playgroud)
更改后,它再次起作用。
| 归档时间: |
|
| 查看次数: |
1595 次 |
| 最近记录: |