伪随机数
随机数我们是在代码中很常用到的概念,常用于生成验证
但计算机所生成的数并不是真正的随机数,是经由算法而得到的数字,也就是说如果我们知道算法的规模,是可以对随机数经行逆推或者预测。
rand和srand
一、rand函数调用
- rand()每次调用都要先查询srand(seed),是否给seed设定了一个值,如果设定了数值,它会自动调用seed来生成随机数
- 无seed的情况会使用默认设置,即srand(1)调用
二、srand函数
- srand函数是随机数的初始化,如srand(1)。如过种子相同,那么产生的随机数就会相同
- 实际应用时,会用srand(time())来初始随机数
三、math.random函数
- Math.random()是令系统随机选取大于等于 0.0 且小于 1.0 的伪随机 double 值
- 无参时,默认用时钟作为seed。
- random类的其他方法也都是伪随机
利用
xctf中的guess题目就用到了随机数预测,服务器会为上传的文件重新命名一个随机生成的名称,其中就用到了rand函数。
题目中可以用seeion值来得出seed,已知seed,可以用php_mt_seed
这个工具来进行预测
根据php版本选用生成的随机数,就可以推出文件名称
后记
在很多网站中都会使用时间伪随机,通过构造脚本可以伪造身份、猜测生成数,关键点在于判断用于生成的种子,和执行函数。
Comments | NOTHING