【问题标题】:RSA/NONE/PKCS1Padding giving error as java.security.NoSuchAlgorithmExceptionRSA/NONE/PKCS1Padding 给出错误为 java.security.NoSuchAlgorithmException
【发布时间】:2026-01-18 15:10:01
【问题描述】:

我使用“RSA/None/PKCS1Padding”作为:

Cipher RSACipher = Cipher.getInstance("RSA/None/PKCS1Padding");

这给了我一个例外:

java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/None/PKCS1Padding

感谢您的帮助。

【问题讨论】:

  • 您能否提供更多信息,例如 java 版本、任何 3rd 方库,是 Oracle JDK、Windows 还是 linux 等?
  • 我也遇到过这个问题。但是当我重新启动服务器时它正在工作。

标签: java encryption rsa


【解决方案1】:

如果您在 Oracle 或 Open JDK 中运行,请尝试使用 "RSA/ECB/PKCS1Padding"。使用 RSA 加密的分组密码模式没有太大意义,但并非所有算法名称在 Java SE 提供程序中都是合乎逻辑的。

不过,Bouncy Castle 图书馆支持"RSA/None/PKCS1Padding"。所以可能代码是为 Bouncy 或 Android 编写的。

【讨论】:

  • 这不是太明智,但是“RSA/ECB/PKCS1Padding”是Java标准算法名称文档指定的名称。它也不处理 v. 1.5 与 2 填充的歧义。
  • @erickson 更糟糕的是,它也不接受超过密钥大小的数据 - 88 位。那会是什么欧洲央行模式呢?
  • 谢谢大家。在阅读了更多文档之后,它解决了问题。 Cipher RSACipher = Cipher.getInstance("RSA/None/PKCS1Padding"); // this should be PKCS1PADDING 或只是 RSA 为 Cipher RSACipher = Cipher.getInstance("RSA"); // 默认为此处提到的“RSA/None/PKCS1PADDING”:javadoc.iaik.tugraz.at/iaik_jce/current/iaik/pkcs/pkcs1/…
  • 安全架构对算法名称不区分大小写。此外,您应该始终指定模式和填充,否则提供商可能会选择自己的默认值 - 每个提供商的默认值可能不同。所以你上面写的很危险。
  • 谢谢,我会提供提供商名称。
最近更新 更多