作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
例如,如果 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/
我是一名优秀的程序员,十分优秀!