Php随机数(使用PHP的加密伪随机数生成器)
今天介绍PHP中的加密伪随机数生成器(CSPRNG扩展)。随机数的生成其实很简单,用rand()或者mt_rand()函数就可以了,但是我们今天说的是一组使用更复杂算法的随机数生成器。Rand()已经不推荐了。mt_rand()是生成速度更快的函数,现在是主流函数。加密伪随机数生成函数是密码安全的,速度会比mt_rand()稍慢。这取决于操作系统的一些功能,我们后面会讲到。
这个加密扩展已经集成在PHP7中,不需要特别安装。如果是PHP7以下的版本,需要独立安装扩展。如果在测试过程中找不到下面描述的函数,请检查PHP的当前版本。
伪随机字符生成
var_dump(random_bytes(5));// string(10) \"0681109dd1\"
Random_bytes()每次调用都会生成内容不同的字符串,而参数是字符长度随机字符。这里,我们传递5个字符并返回10个字符。可以看出,这个参数是字符数,但返回的其实是字节数,对应的是一个字符占用两个字节的返回形式。或者我们可以记住它返回两倍的参数。至于函数,它可以为我们生成安全的用户密码盐、密钥关键字或初始化向量。
伪随机整数生成
var_dump(random_int(100, 999));var_dump(random_int(-1000, 0));// int(900)// int(-791)
对于整数的生成,就更简单了。只需为random_int()函数提供两个参数,即随机整数的范围。其实和mt_rand()一样。
生成源
上述两种加密伪随机函数的生成源都依赖于操作系统,如下:
在Windows系统上,使用CryptGenRandom()函数。使用7.2.0中的CNG-API。
在Linux系统上,将使用Linux getrandom(2)系统调用。
在其他系统上,将使用/dev/urandom。
否则将引发异常。
反常
这两个函数也有相应的例外。例如,如果在上面找不到生成源,就会抛出一个异常。当然,除此之外还会有其他因素导致例外。
如果找不到合适的随机源,将引发异常。
如果给定的参数无效,将引发TypeError。
如果给定的字节长度无效,将会引发错误。
摘要
今天的内容很简单,也找到了函数random_bytes()的第二种用法。以后就不用自己写随机生成盐的函数了,就像我们关于密码盐的文章里密码的“盐”是什么?如何安全地“加盐”你的用户密码?的那个随机字符生成函数(generateSalt)基本可以用这个代替。是不是觉得收获满满?学习的脚步从未停止。让我们一起继续探索更多有趣的内容吧!!
以上就是由优质生活领域创作者 嘉文社百科网小编 整理编辑的,如果觉得有帮助欢迎收藏转发~
本文地址:https://www.jwshe.com/602777.html,转载请说明来源于:嘉文社百科网
声明:本站部分文章来自网络,如无特殊说明或标注,均为本站原创发布。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。分享目的仅供大家学习与参考,不代表本站立场。