PHP的加密伪随机数生成器的使用 php随机数

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 。
如果给定的字节长度无效 , 将会引发错误 。
摘要【PHP的加密伪随机数生成器的使用 php随机数】今天的内容很简单 , 也找到了函数random_bytes()的第二种用法 。以后就不用自己写随机生成盐的函数了 , 就像我们关于密码盐的文章里密码的“盐”是什么?如何安全地“加盐”你的用户密码?的那个随机字符生成函数(generateSalt)基本可以用这个代替 。是不是觉得收获满满?学习的脚步从未停止 。让我们一起继续探索更多有趣的内容吧!!

    推荐阅读