gpt4 book ai didi

java - 生成可预测的安全随机数

转载 作者:行者123 更新时间:2023-11-30 06:43:04 25 4
gpt4 key购买 nike

如何实例化一个可预测且安全的随机数生成器,它将在 Java 版本和操作系统中生成一致的随机数?

以下代码曾经在 Java 8 中运行,但不再在 Java 10 中运行:

import java.security.SecureRandom;

public class PredictableRandom {

public static void main(String[] args) {
PredictableRandom predictableRandom = new PredictableRandom();
predictableRandom.execute();
}

private void execute() {
SecureRandom secureRandom = new SecureRandom();
System.out.println(secureRandom.getAlgorithm());
System.out.println(secureRandom.getProvider());
long seed = 12345678L;
secureRandom.setSeed(seed);
System.out.println(secureRandom.nextLong());
SecureRandom secureRandom2 = new SecureRandom();
secureRandom2.setSeed(seed);
System.out.println(secureRandom2.nextLong());
}
}

在 Java 8 中 - 好的,不同的随机对象生成相同的随机数:

SHA1PRNG
SUN version 1.8
3325995872096263519
3325995872096263519

在 Java 10 中 - 不好,不同的随机对象生成不同的随机数:

DRBG
SUN version 10
-3526685326322256981
-2373261409119309182

最佳答案

您想要做的是使用 SecureRandom.getInstance 使用旧算法获取安全随机的实例。

下面的示例代码。您应该考虑天气与否,这才是您真正想要的行为。

    public void example() throws NoSuchAlgorithmException {
{
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(12345678L);
System.out.println(secureRandom.nextLong());

}
{
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(12345678L);
System.out.println(secureRandom.nextLong());

}

}

这会吐出:

3325995872096263519
3325995872096263519

就像您正在寻找的那样。

关于java - 生成可预测的安全随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52454736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com