0

我正在使用充气城堡实现椭圆曲线 Diffie Hellman。我正在使用bcprov-jdk15on-149.jar. 但

java.security.NoSuchProviderException:JCE 无法验证提供者 BC

抛出异常。它发生在以下行KeyAgreement.getInstance("ECDHC", "BC");

KeyAgreement aKeyAgree = null;
try {
     //exception occur here
     aKeyAgree = KeyAgreement.getInstance("ECDHC", "BC");
}

例外是

java.security.NoSuchProviderException:JCE 无法在 javax.crypto.KeyAgreement.getInstance(KeyAgreement.java:223) 的 javax.crypto.JceSecurity.getInstance(JceSecurity.java:101) 验证提供者 BC

我将 Bouncy castle 提供程序添加到 JRE 中的 java.security 文件中。但这并没有帮助。我想知道这种情况的解决方案。
此外,此问题仅发生在小服务程序上。我用一个 J2SE 项目进行了测试,代码运行良好。仅当我将其放入 serverlet 时才会引发异常。

4

1 回答 1

1

所以,可能的原因:

  1. 您以某种方式重新打包了 bcprovider.jar,例如,使用 maven shade 插件。它使 BC 签名无效。
  2. 您不止一次添加/删除了 BC 提供商。例如:如何让 javax.crypto 类(如 javax.crypto.Cipher)在带有 jboss 的 servlet 上工作?
  3. 您的 jre 安装或某些 jar US_export_policy.jar、local_policy.jar 已损坏或签名无效。尝试与不同的提供商进行一些加密操作来检查这一点。例如,创建 2K RSA 密钥。
  4. 出口 JCE 限制问题:下载并安装 UnlimitedJCEPolicy https://edelivery.oracle.com/otn-pub/java/jce/7/UnlimitedJCEPolicyJDK7.zip
于 2013-11-01T06:37:10.803 回答