Java 安全随机的SHA1PRNG算法是否使用/dev/random作为熵?

Java 安全随机的SHA1PRNG算法是否使用/dev/random作为熵?,java,linux,cryptography,Java,Linux,Cryptography,我试着在javadocs和在线上查找这个问题,但找不到一个明确的答案。丹·戴尔的答案 似乎表明SHA1PRNG不使用任何系统资源来实现熵。这是否正确?否,在默认的Oracle实现中,它使用系统资源,除非在调用nextBytes()之前对其进行种子设定。从Sun/Oracle的SecureRandom文档中: SecureRandom实现尝试完全随机生成器本身的内部状态,除非调用方在调用getInstance方法之后调用setSeed方法: SecureRandom random = Secu

我试着在javadocs和在线上查找这个问题,但找不到一个明确的答案。丹·戴尔的答案


似乎表明SHA1PRNG不使用任何系统资源来实现熵。这是否正确?

否,在默认的Oracle实现中,它使用系统资源,除非在调用
nextBytes()
之前对其进行种子设定。从Sun/Oracle的
SecureRandom
文档中:

SecureRandom实现尝试完全随机生成器本身的内部状态,除非调用方在调用getInstance方法之后调用setSeed方法:

 SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
 random.setSeed(seed);

实际实现是专有的,有点像。当然还有不同版本的Java。但至少有一些Java版本使用/dev/random。我认为,一般来说,对于相对较新的java版本,将在具有/dev/random的系统上使用它。请注意,除非精确指定输出,否则这是非常无用的,因为输出可能在特定的提供程序上有所不同,即使对于同名的算法也是如此。