KeyGenerator返回java.security.NoSuchAlgorithmException:BouncyCastle没有这样的算法

KeyGenerator返回java.security.NoSuchAlgorithmException:BouncyCastle没有这样的算法,java,cryptography,aes,bouncycastle,java-security,Java,Cryptography,Aes,Bouncycastle,Java Security,我尝试在Java项目中使用BouncyCastle,通过执行以下操作,使用KeyGenerator生成AES密钥: KeyGenerator gen = KeyGenerator.getInstance("AES", BouncyCastleProvider.PROVIDER_NAME); 然而,这种情况不断出现: java.security.NoSuchAlgorithmException: no such algorithm: AES for provider BC 我确定我的java.

我尝试在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()运行代码时尝试列出所有提供程序,我会看到:

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


请帮忙,谢谢

事实上我很糟糕,我想我已经解决了我自己的问题。我的问题也应该更清楚。我正在Junit测试中运行这个,我想知道为什么它失败了


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

想知道这是否与JCE无限强度权限策略有关?您的目录中是否有无限强度JAR?嗨,尼尔!是的,由于传统的回购协议,我实际上在这里使用Java 7,我从中提取了US_export_policy.jar和local_policy.jar,并将它们放在/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/jre/lib/security下,我还遗漏了什么吗?ThanksBC 1.47已经很老了,但即使如此,它也应该可以工作;尝试遍历
Security.getProviders()
,看看它是否按原样列出。或者,如果您只需要一个密钥,而不需要BC,则可以使用标准的SunJCE@neal:AES-128不需要无限策略,而且不管怎样jce8策略在jdk7上也不起作用——你需要jce7,它在存档“平台下载”索引中缺失,但可以通过站点(OTN)搜索找到。嗨,dave_thompson_085,是的,我已经尝试列出了提供商,我确实看到了BC的出现。我还尝试在没有BC参数的情况下调用KeyGenerator.getInstance,这是相同的错误。我可以试着看看SunJCE是否可以作为provider@PowerMockIgnore({“javax.crypto.*})
SUN
BC
SunRsaSign
SunEC
SunJSSE
SunJCE
SunJGSS
SunSASL
XMLDSig
SunPCSC
Apple