一 、random study
这个题目中共给出了三个challenge。
1. challenge 1
服务器将python中的random模块的种子设置为int(time()),然后生成随机数让我们猜,只要我们猜对一次就可以通关了。
题目中给了200次机会,应该是考虑到服务器与我们机器的时间不同步的问题(可能相差几秒)。我这里假定服务器时间与本地时间相差不超过10秒,然后对这20种情况进行枚举就好了。相应代码如下:
2.challenge 2
服务器自己调用了一个Java程序生成了三个随机数,然后将前两个告诉我们,让我们猜第三个。
用Java Decompiler对提供的Java程序进行反编译得到源码如下:
public class Main {
public static void main(String[] paramArrayOfString) {
Random random = new Random();
System.out.println(random.nextInt());
System.out.println(random.nextInt());
System.out.println(random.nextInt());
}
}
可以看出这个Java程序是使用了Random类的nextInt函数来生成随机数的。百度一下这个类,可以查到官方文档。从官方文档中可以知道:
Random的nextInt函数就是直接调用next(32)并将得到的值返回。
next(int n)会通过以下方式更新内部存储的seed值,并返回下一个随机数。
//seed乘一个数&#