Day 1
NSSCTF[SWPUCTF 2021 新生赛]fakerandom
下载源件之后是一个py文件,打开后源码如下
随后看到了一个随机数种子,关于随机数种子的知识我了解的不多,只在学校的石头剪刀布随机数生成了解一点,大致是先导入一个random库,然后运用random库中的randint函数,然后随机生成指定的数字。
今天刷题刚好碰到了,再次进行复习以及深入了解
首先的话这里是倒入了一个随机数种子,这里运用了一个random.getrandbits的函数,谷歌了这个函数的用法,大致是返回这个8位二进制数的数值
譬如这里我先设置一个随机数的种子为1,但是我指定这个返回的整数的位数为2,这个2是指定返回的二进制位数,如上图,返回2个二进制的整数,最大也就是2个二进制位也就是11,也就是16进制的0x3,十进制的3,也可以在输出界面找到了3.0.1.0,最大的数也就是3,所以符合我的猜想.
结论:python中random.getrandbits(k)函数输出的是一个0~2^k-1范围内的一个随机整数,k表示的是2进制的位数
引用:https://blog.csdn.net/weixin_42675552/article/details/114314553
所以得知源码中,随机生产了0-255之内的4个整数
对于random.seed函数
引用:https://www.runoob.com/python/func-number-seed.html
可以看到python每次生成的随机数都不是一样的
而如果我们加上random.seed()随机数种子呢?
可以看到,如果随机数的种子相同的话,则生成的随机数一样,如果随机数的种子不一样,则生成的随机数不一样
结论:可以看到当seed()没有参数时,每次生成的随机数是不一样的,而当seed()有参数时,每次生成的随机数是一样的,同时选择不同的参数生成的随机数也不一样
而源代码中的随机数种子在第二个for循环那里是经过了处理的,不过对于生成的随机数我们还是可以进行一个测试,直接加上print即可
可以看到,虽然随机数种子进行了变化,但是得到的随机数是固定的。所以我们直接进行异或算法就可以了
下面是脚本
标签:fakerandom,random,生成,python,seed,种子,随机数,SWPUCTF2021,NSSCTF From: https://www.cnblogs.com/qsons/p/16900031.html