随机数 == 伪随机数?

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

之所以称之为伪随机数,是因为真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。
而计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可见的。我们可以这样认为这个可预见的结果其出现的概率是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
>>> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值