伪随机与真随机

最近在逛谷歌的时候,我偶然发现了random.org,这是一个非常棒的提供真随机数生成服务的网站。
先解释下:真随机数发生器(TRNGs)和伪随机数发生器(PRNGs)的区别是真随机数发生器(TRNGs)使用物理方法来生成数字(如大气噪声),而伪随机数发生器(PRNGs)则是利用数学算法来生成数字(完全由电脑生成的)。
为了更直观的让大家看到这个区别,我决定制作一个真随机和伪随机的生成位图来进行对比

通过random.org获取随机数生成的位图

通过PHP rand()函数在windows下获取随机数生成的位图

嗯!发现了吗?PHP rand()函数生成的位图没有我们想象的那么“随机”!
不是所有的伪随机数发生器产生这样明显的视觉感受,只是恰好是因为一个非常糟糕的组合(php语言、Windows操作系统、rand()方法)导致的。我在Linux系统中运行相同的代码,却没有生成类似这样的图(好像在Windows8以上版本也没有这样的问题了)。但是在windows系统中使用php的mt_rand()方法的效果却是非常好的,它利用Mersenne Twister(马特赛特旋转演算法)产生更好的随机数,并没有这样明显的视觉感受。如果你想知道为什么会发生这样的事,请期待我以后的文章。
这是我用来生成位图的代码:

<?php
// Requires the GD Library
header("Content-type: image/png");
$im = imagecreatetruecolor(512, 512)
    or die("Cannot Initialize new GD image stream");
$white = imagecolorallocate($im, 255, 255, 255);
for ($y = 0; $y < 512; $y++) {
    for ($x = 0; $x < 512; $x++) {
        if (rand(0, 1)) {
            imagesetpixel($im, $x, $y, $white);
        }
    }
}
imagepng($im);
imagedestroy($im);

其实,你完全不需要担心一个随机数生成器生成的是真的随机数还是伪随机数,除非某种程度上它的安全性已经丢失(就是被破解了)。伪随机数发生器在质量上还是有很大的不同。有些是复杂到飞起的,有些是普通到简单的,但没有一个是真实的随机数。

时间: 2024-08-29 12:12:24

伪随机与真随机的相关文章

VB.NET生成随机串或随机数字的方法总结_实用技巧

本文一共介绍了5种生成随机数方式,具体如下: 第一种:转载的方法 Public Enum stringtype allstring = 1 '大小写字母 allnumic = 2 '数字 str_num = 3 '大小写字母+数字 str_upper = 4 '大写字母 str_lower = 5 '大写字母 End Enum Function GenerateRandom(ByVal Length As Integer, ByVal s As stringtype) As String Dim

js实现数组随机字符串(广告随机)

实例  代码如下 复制代码 <script language="JavaScript" type="text/JavaScript"> theAds=new Array(); shu =13; dot=''; theAds[1]='www.111cn.net第一条'; theAds[2]='www.111cn.net第二条'; theAds[3]='www.111cn.net第三条'; theAds[4]='www.111cn.net第四条'; theA

壹球-燃情巴西:分分钟让伪球迷好像真球迷

摘要: 世界杯 正在如火如荼的进行着,忽然之间整个世界变成了足球的领地,作为现在社会最大的信息渠道,手机APP们自然也没闲着,各个APP想尽办法对世界杯做着最全面的报道,今天要推荐 世界杯 正在如火如荼的进行着,忽然之间整个世界变成了足球的领地,作为现在社会最大的信息渠道,手机APP们自然也没闲着,各个APP想尽办法对世界杯做着最全面的报道,今天要推荐的这款壹球-燃情巴西就是其中之一,不过除了常规的新闻和赛况以为,它还提供该场比赛的技术统计.战术分析.球员介绍等一系列内容,更重要的是,壹球-燃情

网站采集技巧研究之seo优化 伪原创变“真原创”

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 最近有点忙,网站内容的充实没办法用更多的时间了,所以想到了采集.很多人都不提倡采集,千篇一律的去copy别人东西, 是不怎么好!但是对于广大个人站长来说,一个门户,内容多的网站怎么可能每篇都是自己原创的呢?所以合理利用采集器必不可少! 下面谈谈采集采集策略,对采集入库的文章进行简单的伪原创!有点采集器带自动替换关键词同义词功能这个不错(本人想

“PE创富”骗局:基金网上圈钱伪私募真传销

资料图片本报记者 聂国春一次性投入1万元,90天可以一次性取回1.2万元,180天可以一次性取回1.7万元,12个月可以一次性取回3.6万元.这样的收益你信吗?在王玉明的口中,这种时下热门的"PE"私募股权融资是前景好.风险小.回报高的快速致富门路.然而,当投资者投入金钱准备大赚一把时,王玉明承诺分红的网站却打不开了--"私募"基金网上圈钱2010年5月的一天,白某在一个饭局上认识了王玉明,后者在闲谈之间告诉他一个快速发财致富的好消息,就是投资一个叫"PE

写在随手记2亿美金融资之后,财务金融是伪命题还是真风口?

近日,随手科技对外宣布完成2亿美元C轮融资,该融资由全球知名私募KKR集团领投,红杉资本.源码资本.凡普金科跟投.作为国内个人记账软件领域的领头羊,随手科技C轮融资的成功,也将"财务金融"这一概念带到大众面前. 问题来了,什么是财务金融?时值互联网金融行业发展步入拐点期,创业者和各路资本都在寻找新的风口,财务金融会是这样的风口吗? 财务金融概念背后的疑问,究竟哪些人在使用记账工具? 当前的互联网金融是典型的场景金融+科技金融模式,以场景为引流渠道,以科技为综合支撑,缺一不可.科技主要是

新版勒索软件使用伪随机密码锁住安卓设备

安卓锁屏勒索软件已经出现一段时间了,但现在,新版安卓勒索软件更加强大而多变.之前,勒索软件惯于使用硬编码的密码来锁屏,但专家可以逆向工程出该密码,让受害者得以解锁自己的设备.然而,新版本勒索软件中,攻击者让逆向工程毫无用武之地,因为它们使用了伪随机密码.鉴于此,受害者也就无法解锁自己的设备,只能乖乖支付赎金. 攻击者还给新版勒索软件配备了与设备自有锁屏相关联的自定义锁屏.这给受害者造成了另一个问题.必须指出的是,此类木马在投放给毫无防备的用户之前就直接生成在移动设备里了. 伪随机密码是什么鬼?

从MySQL数据库表中取出随机数据的代码_php技巧

MySQL 如何从表中取出随机数据  以前在群里讨论过这个问题,比较的有意思.mysql的语法真好玩. 他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询. 翻了手册,找到了下面这个语句,可以完成任务了 SELECT * FROM table_name ORDER BY rand() LIMIT 5; rand在手册里是这么说的: RAND()  RAND(N)  返回在范围0到1.0内的随机浮点值.如果一个整数参数N被指定,它被用作种子值.  mysql> select RAND

asp木马代码解密的随机加密webshell_木马相关

随机加密webshell解密还不错应当免杀 加密源码 复制代码 代码如下: <%@ LANGUAGE = VBScript.Encode %> <%#@~^3A4CAA==@#@& jdDhl/k'r1v2FX!ZFE~,PP,~P,@#@&sHC:'r随机加密 J~P~~@#@&jkDnj"SxE4YY2lJzAhS 4l^0+MRmK:r~P,P~P,P~@#@&ZWazDbotDxEbUn木马随机加密器 rP~P~~,P~P,~P,@#@&