【问题标题】:KeyGenerator returning java.security.NoSuchAlgorithmException: no such algorithm for BouncyCastleKeyGenerator 返回 java.security.NoSuchAlgorithmException:BouncyCastle 没有这样的算法
【发布时间】:2018-03-05 05:37:55
【问题描述】:

我正在尝试在我的 Java 项目中使用 BouncyCastle 通过执行以下操作使用 KeyGenerator 生成 AES 密钥:

KeyGenerator gen = KeyGenerator.getInstance("AES", BouncyCastleProvider.PROVIDER_NAME);

但是这不断返回:

java.security.NoSuchAlgorithmException: no such algorithm: AES for provider BC

我确定我的 java.security 文件是:

security.provider.1=sun.security.provider.Sun
security.provider.2=org.bouncycastle.jce.provider.BouncyCastleProvider
security.provider.3=sun.security.rsa.SunRsaSign
security.provider.4=sun.security.ec.SunEC
security.provider.5=com.sun.net.ssl.internal.ssl.Provider
security.provider.6=com.sun.crypto.provider.SunJCE
security.provider.7=sun.security.jgss.SunProvider
security.provider.8=com.sun.security.sasl.Provider
security.provider.9=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.10=sun.security.smartcardio.SunPCSC
security.provider.11=apple.security.AppleProvider

bcprov-jdk15on-1.47.jar 在 /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/jre/lib/ext 下

在我的代码中,我也使用了

Security.addProvider(new BouncyCastleProvider());

如果我在使用 Security.getProviders() 运行我的代码时尝试列出所有提供程序,我会看到:

SUN
BC
SunRsaSign
SunEC
SunJSSE
SunJCE
SunJGSS
SunSASL
XMLDSig
SunPCSC
Apple

所以在这一点上,我不确定我可能还错过了什么。

请帮忙,谢谢

【问题讨论】:

  • 想知道这是否与 JCE 无限力量管辖政策有关?你的目录中有无限强度的罐子吗? oracle.com/technetwork/java/javase/downloads/…
  • 嗨,尼尔!是的,由于旧版存储库,我实际上在这里使用 Java 7,并且我从 oracle.com/technetwork/java/javase/downloads/… 中提取了 US_export_policy.jar 和 local_policy.jar 并将它们放在 /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents 下/Home/jre/lib/security
  • 我错过了什么吗?谢谢
  • BC 1.47 已经过时了,但即便如此,这也应该可以;尝试遍历Security.getProviders() 并查看它是否按原样列​​出。或者,如果您只需要一个不需要 BC 的密钥,您可以使用标准的 SunJCE。 @neal:AES-128 不需要无限策略,无论如何 jce8 策略在 jdk7 上不起作用——您需要存档“平台下载”索引中缺少的 jce7,但可以通过站点 (OTN) 搜索找到。
  • 嗨 dave_thompson_085,是的,我已尝试列出提供者,但确实看到了 BC。我也试过在没有 BC 参数的情况下调用 KeyGenerator.getInstance ,这是同样的错误。我可以试试看 SunJCE 是否作为提供者工作

标签: java cryptography aes bouncycastle java-security


【解决方案1】:

其实我的错,我想我已经解决了我自己的问题。我的问题也应该更清楚。我在 Junit 测试中运行它,想知道它为什么会失败。

显然,PowerMock 已经模拟了所有 javax.crypto.* 库,我不得不告诉 PowerMock 明确忽略这些库,现在它可以正常工作了:|

【讨论】:

  • @PowerMockIgnore({ "javax.crypto.*" })
猜你喜欢
  • 2016-06-09
  • 2011-01-21
  • 1970-01-01
  • 2021-11-23
  • 2017-02-08
  • 2020-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多