【发布时间】: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