位置: 编程技术 - 正文

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图片拼接)

  • 小规模纳税人怎么变成一般纳税人
  • 差额纳税是什么税
  • 销售收入怎么做会计凭证
  • 外购商品发放给员工 进项税额能不能抵扣
  • 有发票无明细能报销吗
  • 信用卡逾期滞纳金是按天还是按月计算
  • 首次购置增值税税控系统
  • 软件开发公司的运营模式
  • 土地使用证明可以补办吗
  • 合伙企业出资额不计入实收资本和资本公积 那放哪
  • 增值税发票开户行填简称是被允许的吗?
  • 没有座机怎么填固定电话
  • 营改增后计税依据
  • 什么是城镇土地使用税
  • 收取客户税点怎么记账
  • 合并报表存货抵消分录第二年
  • 购物卡发票能否抵扣
  • 如何理解增值税的三种类型?它们的区别是什么?
  • 企业研发活动中心职责
  • 差额纳税和全额纳税
  • 待处理财产损益期末结转到哪里
  • 欠税不交的后果 个人
  • 付款后收到发票怎么写摘要
  • php utf8转gb2312
  • 与资产相关的政府补助,如果相关资产在使用寿命结束时
  • 收到银行承兑汇票的账务处理
  • 企业自产自用产品要交增值税吗?
  • php files
  • web前端综合案例开发离线作业1
  • 实收资本账户对应的账户包括
  • 职工食堂外包账务怎么做
  • php获取长度
  • 基于专业性的家校双向互动,需要家长的学校教育参与
  • diffusion扩散模型训练时间
  • php禁用函数怎么删除
  • php mkdir
  • 小微企业开通社保
  • python怎么将整数转化为字符串
  • phpcms栏目分类
  • 企业所得税资产总额根据什么填
  • 小规模公司卖车怎么开票
  • 增值税发票完税证明图片
  • 二手车交易规则最新
  • 印花税所得税汇算清缴
  • 汇算清缴纳税调整需要做账吗
  • 增值税扣缴义务发生时间为扣缴义务人扣缴税款的当天
  • 企业增值税的计算
  • 独立法人企业关系怎么写
  • 劳务合同如果不发工资怎么办
  • 购入货物的运费计入
  • 损益类科目调整到未分配利润分录
  • 进项税额已经抵扣会计分录
  • 员工迟到扣款如何做账
  • 自产产品用于不动产
  • 金税盘技术维护费
  • 公司办公室装修装修
  • 建筑公司脚手架租赁费会计分录
  • 分期收款销售的会计与纳税处理
  • 固定资产出售算营业收入吗
  • 应交增值税怎么求
  • 非营利医疗机构是什么单位
  • sqlserver 获取字符位置
  • 数据库服务器配置方案
  • win8系统开机界面
  • 如何将windows安装到u盘
  • android-x86安装
  • ubuntu18.04环境变量
  • linux系统的
  • downloader.exe是什么
  • mount挂载文件系统
  • win10回收站设置
  • win7电脑无限蓝屏怎么解决
  • Cocos2d-JS中JavaScript继承
  • Ext JS 4实现带week(星期)的日期选择控件(实战二)
  • 安装运行windows
  • css跑马灯效果
  • dos的命令大全
  • javascript基础笔记
  • 税务局试用期
  • 公务员中了彩票怎么领取
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设