我已经在android和java中将bouncy castle jar文件添加到我的应用程序类路径中。这是我在这两个代码中使用的代码。但是它似乎不能识别提供者"BC“。
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中都抛出了以下异常:
java.security.NoSuchProviderException: no such provider: BC
如何纠正这一点?
我没有在策略文件中添加提供程序。在这样做之后,我得到了以下异常。
java.security.NoSuchAlgorithmException: no such algorithm: SHA1PRNG for provider
BC<br>
这是否意味着bouncy castle不提供"SHA1PRNG“算法的实现?但是我引入bouncy castle的全部原因是在android和java中都有一个公共的提供者,这样用相同的种子生成的随机数序列在android和java中是相同的。
发布于 2012-03-12 04:32:01
显然,它根本没有提供SecureRandom
实现。您可以这样获得系统实现(来自Harmony) (不需要创建实例来调用静态方法):
SecureRandom.getInstance("SHA1PRNG")
BouncyCastle有DigestRandomGenerator
,它可能以类似的方式使用,但可能与Sun SHA1PRNG (看起来是专有的,并且定义良好)也可能不兼容
Re:使用带有固定种子的SecureRandom
:SecureRandom
生成OTP不是正确的工具。要生成OTP,您应该结合使用密钥和可预测元素(时间或计数器)。一种标准的方法是使用由OATH指定的HMAC。有关详细信息,请阅读RFC 4226。
发布于 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
https://stackoverflow.com/questions/9660967
复制相似问题