伪随机数

随机数我们是在代码中很常用到的概念,常用于生成验证
但计算机所生成的数并不是真正的随机数,是经由算法而得到的数字,也就是说如果我们知道算法的规模,是可以对随机数经行逆推或者预测。

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版本选用生成的随机数,就可以推出文件名称

后记

在很多网站中都会使用时间伪随机,通过构造脚本可以伪造身份、猜测生成数,关键点在于判断用于生成的种子,和执行函数。


"孓然一身 , 了无牵挂"