Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 SecureRandom中nextXXX()和generateSeed()函数之间的区别?_Java_Security_Random_Cryptography - Fatal编程技术网

Java SecureRandom中nextXXX()和generateSeed()函数之间的区别?

Java SecureRandom中nextXXX()和generateSeed()函数之间的区别?,java,security,random,cryptography,Java,Security,Random,Cryptography,函数nextXXX()和Java中的函数nextXXX()之间有什么区别 generateSeed中的“种子生成算法”与安全随机生成器本身有什么不同?随机数函数取决于它们生成随机数序列的初始值(在PRNG上读取-伪随机数生成)。next函数将返回由该初始值(种子)生成的下一个数字generateSeed()将为PRNG生成一个新的初始值以供使用。generateSeed()不使用随机数生成器生成的任何字节。相反,SecureRandom实现在对自身进行种子设定时,以及在对自身进行种子设定时,只是

函数nextXXX()和Java中的函数nextXXX()之间有什么区别


generateSeed
中的“种子生成算法”与安全随机生成器本身有什么不同?

随机数函数取决于它们生成随机数序列的初始值(在PRNG上读取-伪随机数生成)。
next
函数将返回由该初始值(种子)生成的下一个数字
generateSeed()
将为PRNG生成一个新的初始值以供使用。

generateSeed()
不使用随机数生成器生成的任何字节。相反,
SecureRandom
实现在对自身进行种子设定时,以及在对自身进行种子设定时,只是对熵源的传递


例如,在Oracle提供的Java SE上调用以下代码:

// initSeed is just zero valued bytes
byte[] initSeed = new byte[16];

SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(initSeed);

byte[] seed = secureRandom.generateSeed(16);

byte[] data = new byte[16];
secureRandom.nextBytes(data);

System.out.printf("Seed: %s%n", Hex.toHexString(seed));
System.out.printf("Data: %s%n", Hex.toHexString(data));
实际上,将为
种子
返回不同的值,并且为
数据
返回相同的值。换句话说,
generateSeed
使用操作系统请求16字节的熵,而随机数生成器仅使用
initSeed
进行种子设定,因此将始终生成相同的伪随机数流


警告:这只是为了说明这一点;您应该依赖任何
SecureRandom
实例来返回除随机字节以外的任何内容。与
setSeed
相关的行为因实现而异。Oracle
“SHA1PRNG”
提供商将其作为唯一的种子,其他人可能会选择将其混合到PRNG状态中(例如,以后的Android实现将始终生成随机数据)。

您读过JavaDocs吗?它们对我来说似乎很清楚…@DavidPostill谢谢你的评论,是的,我在发布这个问题之前阅读了java文档。如果你能解释一下区别,那会很有帮助的为什么?如果您能解释一下您不理解Javadoc的哪一部分,这将非常有帮助。区别在于它们不一样。@EJP修复了这个问题,JavaDoc对generateSeed的作用不是很清楚。在我看来,“种子生成算法”一点也没有指定。@owlstead感谢编辑问题以使其更清晰,是的,我正在寻找种子生成算法。在我的机器上,它不会重新启动任何东西。你可以用它来启动或播种另一台发电机。这是一个非常普通的答案,对不起。OP似乎不太理解这个概念,而不是它的实现。好吧,但最后一行根本不正确,它本身不会重新启动任何东西。如果你修好了,很乐意投票。