【问题标题】:java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/NONE/PKCS1Padding in jar-filejava.security.NoSuchAlgorithmException:在 jar 文件中找不到任何支持 RSA/NONE/PKCS1Padding 的提供程序
【发布时间】:2015-07-07 11:11:45
【问题描述】:

我对 RSA 进行解密和加密,我使用 Cipher.getInstance("RSA/NONE/PKCS1Padding");,并将 Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());compile 'org.bouncycastle:bcprov-jdk16:1.45' 添加到 gradle-file。所以这个项目在 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 文件中 - 不起作用?

【问题讨论】:

标签: java intellij-idea gradle jar jce


【解决方案1】:

"RSA/NONE/PKCS1Padding" 在大多数 JDK 的默认安全提供程序中不可用。您可以使用"RSA/ECB/PKCS1Padding",意思相同,但使用 ECB 名称是为了向后兼容。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多