2012-12-05 38 views
23

我正在使用某种加密技术在JAVA中创建基于swing的应用程序。但 javax.crypto.KeyGenerator.getInstance( “AES”, “BC”)给出了异常:JCE无法在java swing应用程序中验证提供程序BC

java.security.NoSuchProviderException: JCE cannot authenticate the provider BC 
     at javax.crypto.SunJCE_b.a(DashoA13*..) 
     at javax.crypto.KeyGenerator.getInstance(DashoA13*..) 

那么是什么问题?

+8

java.lang.SecurityException: JCE cannot authenticate the provider SC 

更多信息通常意味着你已经做了一些错误的类/瓶和/或类路径的包装。你不能从他们的jar中提取BC类并将它们放入另一个jar中。 –

回答

25

要扩展来自GregS的评论,所有JCE提供程序JAR都必须进行签名,然后才能被Java运行时信任。

BouncyCastle尽职尽责地提供可以正常工作的签名JAR。但是,如果您从该JAR中提取类文件或重新编译源代码,它将删除签名并导致Java拒绝代码。

看到这个相关的SO问题:How to sign a custom JCE security provider

+7

我没有提取或重新编译jar文件,我只从http://repo2.maven.org/maven2/org/bouncycastle/下载bcprov-jdk14和bcpkix-jdk14;然而,它不适合我! –

23

1. 编辑的jre \ lib \ security中\ java.security

添加security.provider.10 = org.bouncycastle.jce.provider.BouncyCastleProvider

2. 复制BC的* .jar到JRE \ lib中\分机

+0

为什么这个建议下来投票?它确实帮助了我:http://stackoverflow.com/questions/27168951/jce-cannot-authenticate-the-provider-bc-when-running-a-jar – Anton

+0

这是唯一帮助我的东西。 –

+1

这对我很好!我使用jython,尽管我直接指定了jar文件(没有单独提取类文件),但我得到了异常声明。可能jython会提取它。好的解决方案谢谢! – rsmoorthy

3

对于那些寻找这个问题,但实际使用SpongyCastle,这可能是有趣知道,在Android没有这样的签名测试,并且对于您的测试,您可以通过openJDK-8使用SpongyCastle,因为它并不关心签名。

仅供参考,以SpongyCastle错误读取:在this issue

相关问题