【问题标题】:KeyGenerator a special Key vs a special SeedKeyGenerator 一个特殊的 Key 与一个特殊的 Seed
【发布时间】:2014-08-25 10:34:07
【问题描述】:

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。普通的Random 会发生什么?

标签: java random seed


【解决方案1】:

SecureRandom 的 javadoc 说:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多