gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:50:41 24 4
gpt4 key购买 nike

函数 nextXXX() 之间有什么区别 - 例如 nextInt()nextFloat()nextBytes() - 和 generateSeed(int numBytes): byte[]SecureRandom class Java 的?

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

最佳答案

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));

实际上将为 seed 返回不同的值,并且始终为 data 返回相同的值。换句话说,generateSeed 使用操作系统请求 16 字节的熵,而随机数生成器仅使用 initSeed 播种,因此将始终生成相同的随机数流。

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

关于java - SecureRandom 中 nextXXX() 和 generateSeed() 函数之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25220492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com