Java 不在Eclipse中时,Bouncy Castle的NoSuchAlgorithmException
我们使用bouncy castle进行加密。 当我们在Eclipse中以调试模式启动代码时没有任何问题,但是当我们手动启动JAR时,我们有一个Java 不在Eclipse中时,Bouncy Castle的NoSuchAlgorithmException,java,maven,bouncycastle,Java,Maven,Bouncycastle,我们使用bouncy castle进行加密。 当我们在Eclipse中以调试模式启动代码时没有任何问题,但是当我们手动启动JAR时,我们有一个NoSuchAlgorithmException。 JAR是使用maven插件配置构建的 <dependencies> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-j
NoSuchAlgorithmException
。
JAR是使用maven插件配置构建的
<dependencies>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<minimizeJar>false</minimizeJar>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
我们已经将安全策略更改为Oracle提供的无限制策略,但问题仍然存在。
有什么想法吗?一个解决方案是将Bouncy Castle provider添加到JRE java.security provider,即JRE外部库中的Bouncy Castle JAR,并将其从JAR中排除。但在处理多个部署时,这是一个难题。还有其他解决方案吗?答案在另一篇文章中,请参阅使用spring boot插件而不是shade插件解决了这个问题
Security.insertProviderAt(new BouncyCastleProvider(), 1);
Cipher cipher = Cipher.getInstance("RSA/None/OAEPWithSHA256AndMGF1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
return cipher.doFinal(data);