【发布时间】:2019-04-08 08:11:03
【问题描述】:
我使用 Java 中的种子生成随机数。知道最终输出是 235 和种子编号 532,我如何在 java 中获得 intBound 编号? 例如
int randomNumber
int seed=532;
int intBound=800;
Random rand = Random(seed);
randomNumber=rand.nextInt(intBound);
System.out.println("The generated Random number using the above seed and int bound is:- "+randomNumber);
//Results is: The generated Random number using the above seed and int bound is: 235
这个问题的简化数学版本是:只知道一个数学公式的两个值,如何产生第三个值?例如 1+2=3 这也意味着如果我们只知道 2 个值和使用的公式,我们可以很容易地得到第三个值,知道用于获取结果的公式。
【问题讨论】:
-
你为什么认为这是可能的?
-
@user2357112 有可能。 See here Random.java "如果 {@code Random} 的两个实例使用相同的种子创建,并且为每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。"
-
@flakes:这些都不意味着您可以恢复
nextInt调用的上限。 -
@user2357112 但有趣的是,您可以减少可能值的集合。在同一范围内再调用几次
nextInt可能会将集合限制为 1 -
只是好奇:如果你可以做到这一点(你做不到),你为什么要想要做到这一点?谁会受益?如何受益?
标签: java random formula reverse-engineering random-seed