Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Bouncy castle没有这样的提供商例外_Java_Android_Bouncycastle - Fatal编程技术网

Java Bouncy castle没有这样的提供商例外

Java Bouncy castle没有这样的提供商例外,java,android,bouncycastle,Java,Android,Bouncycastle,我已经用android和java将bouncy castle jar文件添加到我的应用程序类路径中。 这是我在这两个版本中使用的代码。但它似乎不认识提供者“BC” 它在android和java中都会引发以下异常: java.security.NoSuchProviderException: no such provider: BC 如何更正此问题? 我没有在策略文件中添加提供程序。完成此操作后,我得到以下异常情况。 java.security.NoSuchAlgorithmExceptio

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


它在android和java中都会引发以下异常:

java.security.NoSuchProviderException: no such provider: BC

如何更正此问题?
我没有在策略文件中添加提供程序。完成此操作后,我得到以下异常情况。

java.security.NoSuchAlgorithmException: no such algorithm: SHA1PRNG for provider
 BC<br>
java.security.NoSuchAlgorithmException:没有这样的算法:提供程序的SHA1PRNG
BC

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

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

BouncyCastle有
DigestRandomGenerator
,可能以类似的方式使用,但可能与Sun SHA1PRNG兼容,也可能与Sun SHA1PRNG不兼容(Sun SHA1PRNG似乎是专有的,而且定义非常明确)


回复:使用带有固定种子的
SecureRandom
SecureRandom
生成OTP不是适合此操作的工具。要生成OTP,您应该使用与可预测元素(时间或计数器)组合的密钥。一种标准方法是使用如誓言所规定的HMAC。详情请阅读

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

BouncyCastle有
DigestRandomGenerator
,可能以类似的方式使用,但可能与Sun SHA1PRNG兼容,也可能与Sun SHA1PRNG不兼容(Sun SHA1PRNG似乎是专有的,而且定义非常明确)


回复:使用带有固定种子的
SecureRandom
SecureRandom
生成OTP不是适合此操作的工具。要生成OTP,您应该使用与可预测元素(时间或计数器)组合的密钥。一种标准方法是使用如誓言所规定的HMAC。详情请阅读

您添加了以下行吗

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

默认Java安全性不包含Bouncy Castle实现,因此需要将Bouncy Castle提供程序添加到内存中可用的提供程序列表中,然后才能使用它


您是否添加了以下行

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

默认Java安全性不包含Bouncy Castle实现,因此需要将Bouncy Castle提供程序添加到内存中可用的提供程序列表中,然后才能使用它


我试图在客户端(android)和服务器(servlet)中获得相同的数字顺序。当您使用“sha1prng”作为prng算法的种子对随机数进行播种时,它不会向用户指定的种子添加任何熵。这就是为什么在java中使用安全随机数的两个实例时,它们会产生相同的数字序列。同样的事情也发生在android上。但问题是android和java生成的序列不一样。好吧,我错了。如果你多次调用它,它只会增加熵。不过,如果需要匹配序列,请使用数据库并递增一个数字。安全的随机生成器不是用于此目的的工具。请参阅更新的答案,在Android上使用BC并不容易。我实际上是在使用序列作为一次性密码。我不能使用一个数字并将其递增,然后将其用作otp。是的,如果我使用“trng”,它将无法达到目的,但我使用的是伪随机数生成器。好的,但是使用
SecureRandom
也不是这样做的方法。如果您想要获得可指示且安全的OTP,则需要使用真正的加密密钥作为种子,而不是整数(4字节)。击败我们的OTP需要几个小时。请参阅更新的答案(再次)。问题是我在问题中使用的代码只是一个示例。方法SecureRandom.setSeed(长a)接受长种子。问题不在于种子。问题在于“SHA!PRNG”算法的实施。不过,我会调查HMAC并让您知道。我正在尝试在客户端(android)和服务器(servlet)中获得相同的数字顺序。当您使用“sha1prng”作为prng算法的种子为随机数播种时,它不会向用户指定的种子添加任何熵。这就是为什么在java中使用安全随机数的两个实例时,它们会产生相同的数字序列。同样的事情也发生在android上。但问题是android和java生成的序列不一样。好吧,我错了。如果你多次调用它,它只会增加熵。不过,如果需要匹配序列,请使用数据库并递增一个数字。安全的随机生成器不是用于此目的的工具。请参阅更新的答案,在Android上使用BC并不容易。我实际上是在使用序列作为一次性密码。我不能使用一个数字并将其递增,然后将其用作otp。是的,如果我使用“trng”,它将无法达到目的,但我使用的是伪随机数生成器。好的,但是使用
SecureRandom
也不是这样做的方法。如果您想要获得可指示且安全的OTP,则需要使用真正的加密密钥作为种子,而不是整数(4字节)。击败我们的OTP需要几个小时。请参阅更新的答案(再次)。问题是我在问题中使用的代码只是一个示例。方法SecureRandom.setSeed(长a)接受长种子。问题不在于种子。问题在于简单
java.security.NoSuchAlgorithmException: no such algorithm: SHA1PRNG for provider
 BC<br>
SecureRandom.getInstance("SHA1PRNG")