java.security.NoSuchAlgorithmException:在jar文件中找不到任何支持RSA / NONE / PKCS1Padding的提供程序

时间:2015-04-28 14:18:38

标签: java intellij-idea gradle jar jce

我做解密和加密RSA,我使用Cipher.getInstance("RSA/NONE/PKCS1Padding");,我将Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());compile 'org.bouncycastle:bcprov-jdk16:1.45'添加到gradle文件中。所以这个项目在Intellij Idea中运行和工作,

但是如果我生成.jar文件并运行它,我有:

java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/NONE/PKCS1Padding
    at javax.crypto.Cipher.getInstance(Cipher.java:540) 

(由Gradle的ShadowJar任务生成.jar)。

为什么我在Intellij Idea中的项目 - 工作!在.jar文件中 - 不起作用?

2 个答案:

答案 0 :(得分:3)

"RSA/NONE/PKCS1Padding"不是大多数JDK的默认安全提供程序中可用的东西。您可以使用"RSA/ECB/PKCS1Padding"表示相同的内容,但使用ECB名称进行向后兼容。

BouncyCastle提供程序确实可以访问"RSA/NONE/PKCS1Padding",但是您需要专门查询它,因为将提供程序添加到提供程序列表不会使其成为默认提供程序:

Cipher.getInstance("RSA/NONE/PKCS1Padding", "BC");

答案 1 :(得分:0)

可能构建的 jar 文件不包含依赖项 org.bouncycastle:bcprov-jdk16:1.45
请检查一下Using Gradle to build a jar with dependencies