JCE无法在java swing应用程序中验证提供程序BC

use*_*858 27 java encryption

我在JAVA中创建了一个基于swing的应用程序,它使用了一些加密技术.但是javax.crypto.KeyGenerator.getInstance("AES","BC")给出了异常:

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

那么问题是什么?

小智 38

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

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

2.将bc*.jar复制到jre\lib\ext

  • 有关更多信息:`bc*.jar`表示可以从Web下载的BouncyCastle的jar文件.对我来说,这是`bcprov-jdk15-140.jar` (4认同)
  • 这对我来说非常有用!我正在使用 jython,即使我直接指定了 jar 文件(没有单独提取类文件),我也得到了异常。可能 jython 提取了它。很好的解决方案。谢谢! (2认同)

Dun*_*nes 27

要扩展GregS的注释,必须先对所有JCE提供程序JAR进行签名,然后才能使Java运行时信任它们.

BouncyCastle尽职尽责地提供签名的JAR,它们可以毫无问题地运行.但是,如果从此JAR中提取类文件或重新编译源,它将删除签名并导致Java拒绝代码.

请参阅此相关的SO问题:如何签署自定义JCE安全提供程序

  • 我没有提取或重新编译jar文件,我只从http://repo2.maven.org/maven2/org/bouncycastle/下载bcprov-jdk14和bcpkix-jdk14; 但是,它对我不起作用! (8认同)
  • 使用 OpenJDK。它不需要 JCE 提供者进行签名。 (3认同)