【问题标题】:Java RSAPublicKey factory exceptionJava RSAPublicKey 工厂异常
【发布时间】:2018-04-24 16:20:03
【问题描述】:

将 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

【问题讨论】:

  • 我不确定升级是不是原因,可能只是一个巧合的时机。该错误消息很好地表明您的模数和/或指数数据源已损坏。

标签: java exception rsa public-key


【解决方案1】:

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

安全库/javax.crypto RSA公钥验证

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

JDK-8174756(不公开)

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

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

更改后,它再次起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 2018-06-15
    相关资源
    最近更新 更多