【问题标题】:SHA2RSA encryption with BouncyCastle使用 BouncyCastle 进行 SHA2RSA 加密
【发布时间】:2013-08-05 20:29:18
【问题描述】:

我一直在尝试使用 BouncyCastle 的 JCE 提供程序加密一些数据。我正在尝试“SHA256withRSA”,但得到了“noSuchAlgorithmException”。难道我做错了什么?有人可以帮忙吗?谢谢

特别是我正在尝试

Signature.getInstance("SHA256withRSA", new BouncyCastleProvider());

正如这里提到的 - http://www.bouncycastle.org/wiki/display/JA1/X.509+Public+Key+Certificate+and+Certification+Request+Generation

【问题讨论】:

  • 您是否尝试加密或生成签名?

标签: java security bouncycastle jce


【解决方案1】:

试试这个:

Signature.getInstance("SHA256withRSA", "BC");

在我看到的大多数示例中,第二个参数与提供程序本身相比,传入了一个字符串。

getInstance 方法似乎支持传入提供程序,但也许只是这样做

 new BouncyCastleProvier()

没有正确构造它,导致缺少算法。我怀疑通过传递“BC”字符串,它将使用 JCA/JCE 中已经构建的提供程序。

参考:http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#ProviderImplReq

【讨论】:

  • @praneeth-varma 你明白了吗?
  • 首先,我很抱歉。我不在城里,没有检查我的问题的答复。请不要误会。并解决问题......它奏效了!非常感谢。
  • 太棒了,很高兴听到它。
【解决方案2】:

也许这是选择提供商的问题。

我看到标准的 SunJSSE Provider 支持 SHA1withRSA,但不支持 SHA256withRSA。

您的代码中的某处是否有这样的内容:

sigGen = new JcaContentSignerBuilder("SHA1withRSA").setProvider("BC").build(privKey);

【讨论】:

  • 我没有。并为我缺乏知识感到抱歉。我不确定使用以这种方式构建的“ContentSigner”与使用“签名”和使用私钥初始化之间的区别。我想不同的用例?
  • 我得到的重要部分是告诉 JCA/JCE 使用 BouncyCastle 提供程序的 setProvider("BC") 部分。
  • 哦,好的。是的,我正在这样做。所以你认为 BouncyCastle jce 提供者一开始就没有 SHA256withRSA?
  • 没有。确实如此。我想确保您使用的是 BouncyCastle 提供程序。
  • 好的,我特意告诉它使用提供程序。我不知道出了什么问题。非常感谢您花时间研究这个问题。
【解决方案3】:

首先添加提供者

java.security.Security.addProvider(new BouncyCastleProvider());

然后

Signature.getInstance("SHA256withRSA", "BC");

【讨论】:

    猜你喜欢
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 2021-03-22
    • 2015-12-16
    • 1970-01-01
    • 2016-01-22
    相关资源
    最近更新 更多