java - KeyGenerator 特殊的 key 与特殊的种子

标签 java random seed

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/

相关文章:

ruby-on-rails - 在 Ruby on Rails 中播种

java - 我有一个抽象类和两个扩展,我可以有一个通用的映射器吗?

java - Spring Boot 从服务调用 Rest Controller 方法

c - 如何让 "rand()"生成实际的随机数?

javascript - 由于未知原因,我的随机播放功能在 26 处停止。我怎样才能让它洗所有的牌呢?

sequelize.js - 运行挂起的播种机

java - 以编程方式安装应用程序

java - Android - java.lang.RuntimeException :App is crashing as soon as it launches

android - Catch Android 随机崩溃技巧

带有 uuid 的 Laravel 种子