您当前的位置:首页 > 电脑百科 > 电脑知识

了解计算机如何生成随机数

时间:2020-09-15 09:23:11  来源:  作者:
了解计算机如何生成随机数

 

伪随机数生成器(PRNG)

具有任何编程经验的人都知道计算机是确定性机器。如果你提供相同的输入,则将始终获得相同的输出。这就是为什么让计算机偶然生成随机数比看起来复杂的多。

随机数应用在密码学到博彩,视频游戏等很多行业。但是,计算机天生就不能随机。相反,程序员依靠伪随机数生成器(PRNG),从称为种子/seed的给定起始值以编程方式生成新的随机数。

这些算法有其自身的局限性。由于随机数是通过程序生成的,因此,如果有人能够识别出使用的种子值和PRNG算法,他们将能够预测序列中的下一个随机数。这将使攻击者可以解密,预测序列中的下一张纸牌,在视频游戏中作弊等。

但是PRNG在涉及建模和仿真的情况下仍然非常有用,因为它允许通过使用相同的种子初始化随机数生成器来“重播”一系列随机事件。


“真”随机数生成器(TRNG)

在随机性第一的场景下,我们使用“真”随机数生成器(TRNG)。与具有任意种子值的PRNG不同,TRNG从其环境/外部数据中选择一个种子值。

以下是一些潜在的选择:

  • 鼠标动作
  • 风扇噪音
  • 气压
  • 自上一整秒以来的微秒数

只需要选择攻击者无法预测的种子即可。然后,该种子值将被传递到类似于PRNG的算法中,该算法将生成一个随机数。


两种方法之间的实际差异。

PRNG比TRNG更快,PRNG的确定性在你要重播一系列“随机”事件的情况下非常有用。

此外,某些PRNG算出的随机数,本质上是周期性的,有一定的确定概率,但是使用好的初始化参数的现代PRNG,这个周期可以足够长。

相反,TRNG比PRNG慢,没有确定性,并且不是周期性的。


线性同余生成器

实现一个简单的PRNG。一个称为线性同余生成器(LCG)算法的变体。LCG以前是最常用和研究最多的PRNG之一(https://en.wikipedia.org/wiki/Linear_congruential_generator)。

这是LCG的迭代算法:

了解计算机如何生成随机数

 

LCG上的Wikipedia页面(https://en.wikipedia.org/wiki/Linear_congruential_generator)记录了一些常用的模数m,乘数a和增量值c。关于最佳值的建议尚无统一看法,因此各个实现之间存在不同的值。

我们必须注意这些参数的取值。选择错误的值可能会导致创建一个过短的周期,从而使我们的随机数生成器无用。

在下图中,可以看到对参数的微小更改会极大地影响周期长度。

了解计算机如何生成随机数

 

代码实现

这里使用早期C语言标准(C90 / C99 / ANSI C和C11)中记录的值。

a = 1103515245

m = 2³¹

c = 12345

无论选择哪种PRNG算法,都应导致随机数的均匀分布和足够长的时间。

import Foundation
final class LCG{
  	static func generate(modulus: Int, multiplier: Int, increment: Int, seed: Int) -> Int {
      return (multiplier * seed + increment) % modulus
    } // Generating 100 random numbers using LCG var seed = 0for _ in 0..<100 { let randomNumber = LCG.generate(modulus: 2147483648, multiplier: 1103515245, increment: 12345, seed: seed) seed = randomNumber print(randomNumber)}

模拟扔骰子

假设你要模拟骰子投掷。github地址:

https://gist.github.com/aryamansharda/070d508ee6c61d168d06d5aea9ecf946#file-linearcongruentialgenerator-dice-swift

将模数设置为6似乎很合理,但这会导致周期太短而无法使用。所以这里需要对最后的随机数结果取模6处理。

var seed = 0
for _ in 1...40000 {
  let randomNumber = LCG.generate(modulus: 2147483648, multiplier: 1103515245, increment: 12345, seed: seed)
  seed = randomNumber
    let diceRoll = 1 + (randomNumber % 6)
  print(diceRoll)
}

使用上面的代码,模拟40,000次骰子掷骰,查看结果,可以看到结果确实是均匀分布。



Tags:计算机   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、背景介绍永恒之蓝是指2017年4月14日晚,黑客团体Shadow Brokers(影子经纪人)公布一大批网络攻击工具,其中包含“永恒之蓝”工具,“永恒之蓝”利用Windows系统的SMB漏洞可以获...【详细内容】
2021-12-27  Tags: 计算机  点击:(3)  评论:(0)  加入收藏
准备好软件IPOP、用ENSP模拟一下华为交换机 启动交换机 <Huawei>sysEnter system view, return user view with Ctrl+Z.[Huawei]sysname FTPClient[FTPClient]interface vla...【详细内容】
2021-12-15  Tags: 计算机  点击:(22)  评论:(0)  加入收藏
一、计算机网络概述 1.1 计算机网络的分类按照网络的作用范围:广域网(WAN)、城域网(MAN)、局域网(LAN);按照网络使用者:公用网络、专用网络。1.2 计算机网络的层次结构 TCP/IP四层模...【详细内容】
2021-12-14  Tags: 计算机  点击:(30)  评论:(0)  加入收藏
上一节中我们学了如何实现ARP断网攻击,本节中我们将利用ARP欺骗的原理实现截取目标计算机图片流量,内容包括:&uuml;如何开启ip转发&uuml;怎样截取受害机图片流量 一、开启ip转...【详细内容】
2021-11-23  Tags: 计算机  点击:(22)  评论:(0)  加入收藏
今天几乎所有的数字显示设备都基于某种类型的 RGB(红、绿、蓝)颜色模型。RGB 是表示人类可以看到的大多数颜色的最有效方式(有一些颜色不能很好地产生,但这是另一个讨论)。相机...【详细内容】
2021-10-09  Tags: 计算机  点击:(49)  评论:(0)  加入收藏
一、漏洞介绍如果用户在受影响的系统上收到特制的 RPC 请求,则该漏洞可能允许远程执行代码。在 Microsoft Windows 2000、Windows XP 和 Windows Server 2003 系统上,攻击者可...【详细内容】
2021-09-23  Tags: 计算机  点击:(73)  评论:(0)  加入收藏
随着计算机变得越来越小,存储驱动器等硬件组件也必须变得越来越小。固态驱动器的引入允许超薄型设计,如Ultrabook,但这与行业标准SATA接口相冲突。 mSATA接口旨在创建可与SATA...【详细内容】
2021-09-03  Tags: 计算机  点击:(83)  评论:(0)  加入收藏
在系统运行时, 病毒通过病毒载体即系统的外存储器进入系统的内存储器, 常驻内存。该病毒在系统内存中监视系统的运行, 当它发现有攻击的目标存在并满足条件时,便从内存中将...【详细内容】
2021-08-30  Tags: 计算机  点击:(97)  评论:(0)  加入收藏
Hey guys,这里是 cxuan,欢迎你阅读我最新一期的文章,大家知道,我连载计算机网络已经有一定时间了,当我每了解一个新技术或者新框架的时候,我都想要先把名字概念弄懂是什么,可见概念...【详细内容】
2021-08-30  Tags: 计算机  点击:(52)  评论:(0)  加入收藏
根据个人总结,其原因主要有以下三点: 让符号位也能参与数值的计算,让计算规则更简单 让减法运算也能用加法表示,简化了硬件电路的设计 让0有统一的编码,因为 反码 和 原码 中 +0...【详细内容】
2021-08-30  Tags: 计算机  点击:(53)  评论:(0)  加入收藏
▌简易百科推荐
回答这个问题前首先要了解一度电的定义一度电= 1000W&middot;h ,是一个能量单位,一个功率为1000w的设备持续运作一小时就会消耗1度电。所以台式机多少时间一度电完全取决于台...【详细内容】
2021-12-20  数码榜    Tags:台式电脑   点击:(5)  评论:(0)  加入收藏
你是不是很多时候都会紧急冲向电源插座以拯救笔记本电脑的电量?很多时候由于附近没有方便的插座,一是会误事,二是会导致尴尬。幸运的是,现代笔记本电脑比前辈高效得多。如今,即...【详细内容】
2021-12-16  趣玩公社    Tags:电池   点击:(17)  评论:(0)  加入收藏
电脑在我们生活中的重要性不言而喻。如何保证自己的电脑流畅好用,对于很多用户来说都非常重要。作为一个理科男和IT从业者,对于自己的电脑还是非常在意的,会定期的进行整理,保持...【详细内容】
2021-12-09  小伊评科技    Tags:电脑   点击:(13)  评论:(0)  加入收藏
大家好,我是良许。不管我们使用什么操作系统,无论是 Windows、macOS 还是 Linux ,里面都安装了许多软件、驱动程序和固件。但是,这三者概念有区别呢?我在朋友圈做了个小调查,发现...【详细内容】
2021-11-30  良许Linux    Tags:固件   点击:(10)  评论:(0)  加入收藏
澎湃问吧世界著名密码史学家戴维&middot;卡恩曾说:“人类使用密码的历史几乎与使用文字的时间一样长”,这意味着人类密码领域的较量已近五千年。提及“密码”一词,大多数人会想...【详细内容】
2021-11-24    澎湃新闻  Tags:密码   点击:(16)  评论:(0)  加入收藏
由于去中心化域名和账户体系可以承载应用、网站和用户身份,因此有理由相信,这是 Web3 世界中不可或缺的一环。撰文:潘致雄如果回忆一下初次进行的加密货币转账时的体验,特别是在...【详细内容】
2021-11-03  链闻ChainNews    Tags:ENS   点击:(26)  评论:(0)  加入收藏
 文件系统(File System)是计算机系统必不可少的组成部分,可以说除了部分结构简单的单片机系统之外,文件系统是支撑每一个计算机系统运行的最重要的支撑,无论是操作系统、应用程...【详细内容】
2021-11-01  欧工玩转嵌入式  CSDN  Tags:FAT32   点击:(30)  评论:(0)  加入收藏
SDS 2.0时代进化达尔文的《进化论》认为,地球上现存的所有生物都是自然选择的结果,生物只有适应环境的变化,才能得到生存和进化。回望到企业存储,一个常做常新的行业,从上古结绳...【详细内容】
2021-10-28  ExponTech   企鹅号  Tags:SDS   点击:(35)  评论:(0)  加入收藏
在昨天的微信《远程办公危机四伏,到底该pick谁给你保驾护航?》中介绍了远程员工应该具备的四大安全工具,今天继续分享干货:05 双因子令牌在理想的情况下,每个人都会对所有的关键...【详细内容】
2021-10-26    计算机世界  Tags:远程办公   点击:(32)  评论:(0)  加入收藏
今天几乎所有的数字显示设备都基于某种类型的 RGB(红、绿、蓝)颜色模型。RGB 是表示人类可以看到的大多数颜色的最有效方式(有一些颜色不能很好地产生,但这是另一个讨论)。相机...【详细内容】
2021-10-09  懒懒散散的程序员    Tags:RGB   点击:(49)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条