随机数 == 伪随机数?

文章解释了伪随机数的定义,即它们是通过算法模拟而非真实随机事件生成的。在Python中,可以使用`random.getstate()`和`random.setstate()`来保存和恢复随机数生成的状态,从而重现序列。这展示了伪随机数序列的可预测性,对于理解其在加密和安全中的潜在风险至关重要。
摘要由CSDN通过智能技术生成

随机数是专门的随机试验的结果,那么为什么叫伪随机数呢?

之所以称之为伪随机数,是因为真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。
而计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可见的。我们可以这样认为这个可预见的结果其出现的概率是100%。所以用计算机随机函数所产生的“随机数”并不随机,是伪随机数。计算机的伪随机数是由 随机种子 根据一定的计算方法计算出来的数值。所以,只要计算方法一定,随机种子一定,那么产生的随机数就是固定的。

那么怎么对伪随机数进行攻击呢,也就是怎么样再现之前的随机数呢?

以python为例

>>> x = random.getstate()            //将随机数内部的状态赋值给x
>>> print(x)
(3, (1016028004, 1802878489, 812885751, 2907554112, 1792390388, 2786629648, 3270952119, 342996505, 2586295976, 509783117, 3462393140, 3197552260, 4130960772, 987064256,...... 1), None)
>>> random.randint(1,10)           //随机生成1-10之间的随机数
3
>>> random.randint(1,10)           //随机生成1-10之间的随机数
1
>>> 
>>> random.randint(1,10)           //随机生成1-10之间的随机数
9
>>> random.randint(1,10)
10
>>> random.randint(1,10)
9
>>> random.randint(1,10)
4
>>> random.setstate(x)       //重新设置之前的随机数状态,即将之前的种子设置为当前的随机数状态值
>>> random.randint(1,10)     //再次生成随机数发现与之前的随机数一致,说明随机数攻击成功,也再次印证了python的random模块生成的随机数是有规律特征的所谓的伪随机数
3
>>> random.randint(1,10)
1
>>> random.randint(1,10)
9
>>> random.randint(1,10)
10
>>> random.randint(1,10)
9
>>> random.randint(1,10)
4
>>> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值