RandomGenerator
应该为每个唯一种子生成唯一 key ,这是否正确?
我编写了以下代码,但对于相同的种子,它生成不同的字节数组 - 为什么?
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 说:
Many SecureRandom implementations are in the form of a pseudo-random number generator (PRNG), which means they use a deterministic algorithm to produce a pseudo-random sequence from a true random seed. Other implementations may produce true random numbers, and yet others may use a combination of both techniques.
所以,不,SecureRandom 不保证它产生的结果是由其种子的值确定性决定的。相反:如果 SecureRandom 不是基于种子生成确定性序列的 PRNG,则它会更安全。
关于java - KeyGenerator 特殊的 key 与特殊的种子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25483959/