这是正确的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;
}
答案 0 :(得分:1)
SecureRandom的javadoc说:
许多SecureRandom实现采用伪随机数生成器(PRNG)的形式,这意味着它们使用确定性算法从真正的随机种子生成伪随机序列。其他实现可以产生真正的随机数,而其他实现可以使用两种技术的组合。
所以,不,SecureRandom并不能保证它产生的东西是由其种子的价值决定性决定的。相反:如果不是PRNG产生基于种子的确定性序列,则SecureRandom更安全。