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播种,因此将始终生成相同的伪随机数流.