KeyGenerator一个特殊的Key vs一个特殊的种子

时间:2014-08-25 10:34:07

标签: java random seed

这是正确的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;
}

1 个答案:

答案 0 :(得分:1)

SecureRandom的javadoc说:

  

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

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