Java 密钥生成器一个特殊密钥与一个特殊种子

Java 密钥生成器一个特殊密钥与一个特殊种子,java,random,seed,Java,Random,Seed,RandomGenerator应该为每个唯一种子生成唯一密钥,这是否正确 我编写了以下代码,但是对于同一个种子,它会生成不同的字节数组——为什么 public static byte[] getRawKey(byte [] seed) throws Exception { KeyGenerator kgen = KeyGenerator.getInstance("AES"); SecureRandom sr = SecureRandom.getInstance("SHA1PRNG

RandomGenerator
应该为每个唯一种子生成唯一密钥,这是否正确

我编写了以下代码,但是对于同一个种子,它会生成不同的字节数组——为什么

public static byte[] getRawKey(byte [] seed) throws Exception {
    KeyGenerator kgen = KeyGenerator.getInstance("AES");
    SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
    sr.setSeed(seed);
    kgen.init(128, sr);
    SecretKey skey = kgen.generateKey();
    byte[] raw = skey.getEncoded();
    return raw;
}

SecureRandom的javadoc说:

许多SecureRandom实现采用伪随机数生成器(PRNG)的形式,这意味着它们使用确定性算法从真正的随机种子生成伪随机序列。其他实现可能会产生真正的随机数,而其他实现可能会使用这两种技术的组合


所以,不,SecureRandom不能保证它产生的结果是由其种子的价值决定的。相反:如果SecureRandom不是基于种子生成确定性序列的PRNG,则它更安全。

您使用的是
SecureRandom
。普通
随机
会发生什么?