gpt4 book ai didi

java - 有没有办法从数字序列中生成种子?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:30:37 24 4
gpt4 key购买 nike

例如,如果 java 生成伪随机序列:9 3 2 5 6通过使用 23 作为种子,我怎样才能做相反的事情?即从序列 9 3 2 5 6 中获取 23

或者如何为特定序列分配种子?

如果有数据库就很容易做到——只需为序列分配一个随机键

INSERT INTO SEQUENCE_TABLE VALUES (RANDOM_KEY, SEQUENCE)

但是,如果不允许我使用数据库,是否有公式可以做这样的事情?

最佳答案

是的,对设计不当的伪随机数生成器的数字流进行逆向工程绝对容易,例如 Java 编程语言 (java.util.Random) 中的线性同余 PRNG 实现。

事实上,只要来自特定生成器的 两个 值,以及有关值出现顺序的信息,就可以预测整个流。

Random random = new Random();
long v1 = random.nextInt();
long v2 = random.nextInt();
for (int i = 0; i < 65536; i++) {
long seed = v1 * 65536 + i;
if (((seed * multiplier + addend) & mask) >>> 16) == v2) {
System.out.println("Seed found: " + seed);
break;
}
}

这正是使用加密安全随机数生成器至关重要的原因,这些随机数生成器已经过整个社区的审查,适用于需要安全性的实现。

有更多关于逆向工程 PRNG 的信息,包括 java.util.Random here . ...

关于java - 有没有办法从数字序列中生成种子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8936891/

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