java.security.NoSuchProviderException:没有这样的提供者:BC

我正在使用AdvancedInstaller 9.8将我的javacode(webapplication)构建到安装程序。 通常我的应用程序运行正常。 使用Advanced Installer 9.8创建安装程序后,安装程序大小约为55 MB。 但是高级安装程序中有一个选项可以压缩为安装而生成的所有jar子。 如果我压缩jar子,安装程序大小约为16 MB。 但是当我使用Advanced Installer 9.8压缩时,我在执行KeyPairGenerator行时会遇到exception(如标题中所述) kpg = KeyPairGenerator.getInstance(“RSA”,“BC”) ; 在我的代码中。 KeyPairGenerator再次来自java.security。*;

有人可以告诉我,这个问题可能是什么原因。 我知道在使用AdvancedInstaller进行压缩时,可能会出现Advanced Installer压缩的问题。 但我的问题是java方面通常可能出现的问题,以解决这个问题。 (我的意思是可能的原因,就像任何文件可能被损坏(或)等任何其他原因),以便我可以从那里开始工作。

在代码之前添加此行:

Security.addProvider(new BouncyCastleProvider()); 

它通过替换最新的bcprov-jdk15-.jar得到修复。 我以前的版本是bcprov-jdk15-135.jar,它创建了上面提到的问题。

除了检查jre配置,您还需要检查

1.检查配置中是否设置了java home

2.检查用于应用程序的java环境

3.检查\ jre \ lib \ security \ java.security是否有bouncycastle提供程序条目。 即security.provider.9 = org.bouncycastle.jce.provider.BouncyCastleProvider

4.还要检查弹跳城堡jar是否已添加到\ jre \ lib \ ext \ bcprov-jdk15on-147.jar(最新版本适用于java 1.5和1.6)

您可以通过使用以下代码编辑java.security来创建静态块来添加安全提供程序:

 static { Security.addProvider(new BouncyCastleProvider()); } 

如果您正在使用maven项目,则必须在项目的pom.xml文件中为BouncyCastleProvider添加依赖项,如下所示。

  org.bouncycastle bcprov-jdk15on 1.47  

如果您使用的是普通的java项目,那么您可以从下面给出的链接添加下载bcprov-jdk15on-147.jar并编辑您的类路径。

http://www.java2s.com/Code/Jar/b/Downloadbcprovextjdk15on147jar.htm

可以通过导入以下内容来解决此问题:

 import org.bouncycastle.jce.provider.BouncyCastleProvider; 

然后将以下代码放在您的类方法中:

 Security.addProvider(new BouncyCastleProvider());