我做解密和加密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文件中 - 不起作用?
答案 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