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

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。

如果给定的字节长度无效,将会引发错误。

摘要

今天的内容很简单,也找到了函数random_bytes()的第二种用法。以后就不用自己写随机生成盐的函数了,就像我们关于密码盐的文章里密码的“盐”是什么?如何安全地“加盐”你的用户密码?的那个随机字符生成函数(generateSalt)基本可以用这个代替。是不是觉得收获满满?学习的脚步从未停止。让我们一起继续探索更多有趣的内容吧!!

以上就是由优质生活领域创作者 嘉文社百科网小编 整理编辑的,如果觉得有帮助欢迎收藏转发~