首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Bouncy castle没有这样的提供者例外

Bouncy castle没有这样的提供者例外
EN

Stack Overflow用户
提问于 2012-03-12 02:17:21
回答 2查看 10.6K关注 0票数 1

我已经在android和java中将bouncy castle jar文件添加到我的应用程序类路径中。这是我在这两个代码中使用的代码。但是它似乎不能识别提供者"BC“。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SecureRandom sr1=new SecureRandom().getInstance("SHA1PRNG", "BC");
      System.out.println(sr1.getProvider());
      sr1.setSeed(12);
      byte[] a=new byte[0];
      sr1.nextBytes(a);
      int ai=a[0];
      System.out.println(ai);

它在android和java中都抛出了以下异常:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java.security.NoSuchProviderException: no such provider: BC

如何纠正这一点?

我没有在策略文件中添加提供程序。在这样做之后,我得到了以下异常。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java.security.NoSuchAlgorithmException: no such algorithm: SHA1PRNG for provider
 BC<br>

这是否意味着bouncy castle不提供"SHA1PRNG“算法的实现?但是我引入bouncy castle的全部原因是在android和java中都有一个公共的提供者,这样用相同的种子生成的随机数序列在android和java中是相同的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-12 04:32:01

显然,它根本没有提供SecureRandom实现。您可以这样获得系统实现(来自Harmony) (不需要创建实例来调用静态方法):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SecureRandom.getInstance("SHA1PRNG")

BouncyCastle有DigestRandomGenerator,它可能以类似的方式使用,但可能与Sun SHA1PRNG (看起来是专有的,并且定义良好)也可能不兼容

Re:使用带有固定种子的SecureRandomSecureRandom生成OTP不是正确的工具。要生成OTP,您应该结合使用密钥和可预测元素(时间或计数器)。一种标准的方法是使用由OATH指定的HMAC。有关详细信息,请阅读RFC 4226

票数 0
EN

Stack Overflow用户

发布于 2015-05-26 14:32:49

你添加了下面这行吗?

Security.addProvider(新org.bouncycastle.jce.provider.BouncyCastleProvider());

缺省的Java Security不包含Bouncy Castle实现,因此需要将Bouncy Castle提供程序添加到内存中可用的提供程序列表中,然后才能使用它。

http://www.java2s.com/Code/Java/Security/SecureRandomSHA1PRNG.htm

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9660967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文