位置: 编程技术 - 正文

PHP中的随机性 你觉得自己幸运吗?(php随机数组)

编辑:rootadmin

推荐整理分享PHP中的随机性 你觉得自己幸运吗?(php随机数组),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php随机一言,php随机ua,php随机函数是什么,php随机ua,php产生随机数函数,php随机函数是什么,php随机一言,php随机一言,内容如对您有帮助,希望把文章链接给更多的朋友!

本文分析了生成用于加密的随机数的相关问题。 PHP 5没有提供一种简单的机制来生成密码学上强壮的随机数,但是PHP 7通过引入几个CSPRNG函数来解决了这个问题。

一、什么是CSPRNG

引用维基百科,一个密码学上安全的伪随机数发生器(Cryptographically Secure Pseudorandom Number Generator 缩写CSPRNG)是一个伪随机数生成器(PRNG),其生成的伪随机数适用于密码学算法。

CSPRNG可能主要用于:

密钥生成(例如,生成复杂的密钥) 为新用户产生随机的密码 加密系统

获得高级别安全性的一个关键方面就是高品质的随机性

二、PHP7 中的CSPRNG

PHP 7引入了两个新函数可以用来实现CSPRNG: random_bytes 和 random_int。

random_bytes 函数返回一个字符串,接受一个int型入参代表返回结果的字节数。

例子:

random_int 函数返回一个指定范围内的int型数字。

例子:

三、后台运行环境

以上函数的随机性不同的取决于环境:

在window上,CryptGenRandom()总是被使用。 在其他平台,arc4random_buf()如果可用会被使用(在BSD系列或者具有libbsd的系统上成立) 以上都不成立的话,一个linux系统调用getrandom(2)会被使用。 如果还不行,/dev/urandom 会被作为最后一个可使用的工具 如果以上都不行,系统会抛出错误

四、一个简单的测试

一个好的随机数生成系统保证合适的产生“质量”。为了检查这个质量, 通常要执行一连串的统计测试。不需要深入研究复杂的统计主题,比较一个已知的行为和数字生成器的结果可以帮助质量评价。

PHP中的随机性 你觉得自己幸运吗?(php随机数组)

一个简单的测试是骰子游戏。假设掷1个骰子1次得到结果为6的概率是1/6,那么如果我同时掷3个骰子次,得到的结果粗略如下:

0 个6 = .9 次1 个6 = .7次2 个6 = 6.9次3 个6 = 0.5次以下是是实现实现掷骰子1,,次的代码:

用PHP7 的 random_int 和简单的 rand 函数可能得到如下结果

如果先看到rand 和 random_int 更好的比较我们可以应用一个公式把结果画在图上。公式是:(php结果-期待的结果)/期待结果的0.5次方。

结果图如下:

(接近0的值更好)

尽管3个6的结果表现不好,并且这个测试对实际应用来说太过简单我们仍可以看出 random_int 表现优于 rand.

进一步,我们的应用的安全级别由于不可预测性和随机数发生器的可重复行为而得到提升。

PHP5 呢

缺省情况下,PHP5 不提供强壮的随机数发生器。实际上,还是有选择的比如 openssl_random_pseudo_bytes(), mcrypt_create_iv() 或者直接使用fread()函数来使用 /dev/random 或 /dev/urandom 设备。也有一些包比如 RandomLib 或 libsodium.

如果你想要开始使用一个更好的随机数发生器并且同时准备好使用PHP7,你可以使用Paragon Initiative Enterprises random_compat 库。 random_compat 库允许你在 PHP 5.x project.使用 random_bytes() and random_int()

这个库可以通过Composer安装:

random_compat 库和PHP7使用不同的顺序:

这个库的一个简单应用用来产生密码:

总结

你总是应该使用一个密码学上安全的伪随机数生成器,random_compat 库提供了一种好的实现。

如果你想要使用可靠的随机数据源,如你在本文所见,建议尽快使用 random_int 和 random_bytes。

标签: php随机数组

本文链接地址:https://www.jiuchutong.com/biancheng/289130.html 转载请保留说明!

上一篇:PHP中的session安全吗?(php session_start)

下一篇:两种php实现图片上传的方法(php图片拼接)

  • 第四季度所得税没有计提怎么做账
  • 跨年取得的发票怎么入账
  • 向投资者支付的股息不得在计算应纳税所得额时扣除
  • 不能抵扣进项税额的发票类型
  • 减免所得税优惠明细表怎么填
  • 发出商品的会计核算
  • 高危行业企业安全费用提取
  • 建安企业会计处理
  • 建筑行业未收款先开发票如何做账?
  • 退回多扣社保分录
  • 记账凭证广告费
  • 外币账户的银行信息在哪查询
  • 公司发年终奖怎么发朋友圈
  • 公司股票卖出会计处理
  • 发票一直显示在报送中
  • 开了发票必须记收入吗
  • 车船税的减免税
  • 哪些资产减值损失可以 转回,哪些不能?
  • 借主营业务成本贷库存商品
  • 注册资金印花税怎么算
  • 收到汽车报废补贴怎么做账?
  • win7更改电脑设置在哪里
  • 月末一次加权平均法是什么意思
  • 单位外币账户
  • 企业增加值的计算
  • win10应用图标怎么调出来
  • 临时工工资的会计处理
  • wamp搭建网站教程
  • php实现上传图片功能
  • 营改增后增值税税率
  • 年终奖发放问题
  • 借款业务包括以下哪些形式
  • 不良品返修流程
  • yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
  • 社保比例调整后多久生效
  • 其他应收账款属于
  • php环境搭建apache
  • postman操作流程
  • iterator用法 移除对象
  • css网页布局代码
  • 海外佣金需要交税吗
  • 网络销售税率怎么算
  • 微信收款怎么做会计分录
  • 房屋出租 交税
  • pyqt 菜单
  • 城建税的减免规定有哪些
  • 现代服务税目包括哪些具体分类
  • 养殖类合作社
  • 残保金季度申报如何计算
  • 执行迟延履行金的规定
  • 收到托收凭证怎么做分录
  • 代理进口的增值税是多少
  • 固定资产改造多少直接进费用
  • 小规模什么情况下必须转为一般纳税人
  • 转回小规模
  • 购买固定资产是应付账款还是其他应付款
  • 特殊事项税务处理
  • 劳动者权益包含哪些
  • 银行本票具体操作流程
  • WINDOWS系统中删除放入回收站的文件占用什么空间
  • 怎么激活win7旗舰版系统
  • WIN7系统电脑对话框跟鼠标走怎样设置
  • win8功能
  • linux系统怎么启动软件
  • cocos2d-x引擎
  • node 全局安装
  • 给自己的网站制作软件
  • 什么是批处理模式
  • nodejs数据库数据渲染
  • Node.js中的全局变量有哪些
  • linux共享内存最大值
  • javascript中用于声明变量的关键字
  • javascript entries
  • jQuery使用zTree插件实现树形菜单和异步加载
  • jquery对象与dom对象可以相互转换
  • 如何用android
  • 座机怎么查来电显示号码
  • 江西烟草公司局长
  • 我国税制结构是怎样的
  • 地方税务局怎么样
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设