首页 后端开发 php教程 [PHP]利用openssl_random_pseudo_bytes跟base64_encode函数来生成随机字符串

[PHP]利用openssl_random_pseudo_bytes跟base64_encode函数来生成随机字符串

Jun 13, 2016 pm 12:17 PM
bytes length openssl random

[PHP]利用openssl_random_pseudo_bytes和base64_encode函数来生成随机字符串

openssl_random_pseudo_bytes函数本身是用来生成指定个数的随机字节,因此在使用它来生成随机字符串时,还需要配合使用函数base64_encode。如下所示:

<code class="php hljs "><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getRandomString</span><span class="hljs-params">(<span class="hljs-variable">$length</span> = <span class="hljs-number">42</span>)</span>    {</span>        <span class="hljs-comment">/*         * Use OpenSSL (if available)         */</span>        <span class="hljs-keyword">if</span> (function_exists(<span class="hljs-string">'openssl_random_pseudo_bytes'</span>)) {            <span class="hljs-variable">$bytes</span> = openssl_random_pseudo_bytes(<span class="hljs-variable">$length</span> * <span class="hljs-number">2</span>);            <span class="hljs-keyword">if</span> (<span class="hljs-variable">$bytes</span> === <span class="hljs-keyword">false</span>)                <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> RuntimeException(<span class="hljs-string">'Unable to generate a random string'</span>);            <span class="hljs-keyword">return</span> substr(str_replace([<span class="hljs-string">'/'</span>, <span class="hljs-string">'+'</span>, <span class="hljs-string">'='</span>], <span class="hljs-string">''</span>, base64_encode(<span class="hljs-variable">$bytes</span>)), <span class="hljs-number">0</span>, <span class="hljs-variable">$length</span>);        }        <span class="hljs-variable">$pool</span> = <span class="hljs-string">'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'</span>;        <span class="hljs-keyword">return</span> substr(str_shuffle(str_repeat(<span class="hljs-variable">$pool</span>, <span class="hljs-number">5</span>)), <span class="hljs-number">0</span>, <span class="hljs-variable">$length</span>);    }</code>
登录后复制

在调用base64_encode函数之后,还对结果进行了一次替换操作,目的是要去除随机生成的字符串中不需要的字符。

当然,在使用openssl_random_pseudo_bytes函数之前,最好使用function_exists来确保该函数在运行时是可用的。如果不可用,则使用Plan B:

<code class="php hljs ">substr(str_shuffle(str_repeat(<span class="hljs-variable">$pool</span>, <span class="hljs-number">5</span>)), <span class="hljs-number">0</span>, <span class="hljs-variable">$length</span>);</code>
登录后复制

这个函数的通用性很强,可以根据业务的需要进行适当修改然后当作静态方法进行调用。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Nginx如何使用OpenSSL库实现更安全的通信 Nginx如何使用OpenSSL库实现更安全的通信 Jun 10, 2023 pm 01:51 PM

Nginx是一款广泛应用于Web服务器、负载均衡器、反向代理和缓存的软件。在网络传输过程中,数据的加密和安全性越来越受到关注。为了提高通信的安全性,可以使用OpenSSL库来实现SSL/TLS协议,从而保护敏感数据的传输。本文将讲解如何使用Nginx与OpenSSL库实现更安全的通信。安装与配置OpenSSL库首先,需要在服务器上安装OpenSSL库。可以使

如何使用 OpenSSL 生成 MySQL SSL 证书 如何使用 OpenSSL 生成 MySQL SSL 证书 Sep 09, 2023 pm 02:12 PM

如何使用OpenSSL生成MySQLSSL证书简介:MySQL是一种广泛应用的关系型数据库系统,在实际生产环境中使用SSL(SecureSocketsLayer)协议进行加密通信是非常重要的。本文将介绍如何使用OpenSSL工具生成MySQLSSL证书,并提供相应的代码示例。步骤:安装OpenSSL:首先,确保计算机上已安装O

HWID V 2.2手动激活的方法和教程 HWID V 2.2手动激活的方法和教程 Oct 20, 2023 pm 07:17 PM

这适用于想要执行手动激活的用户。如果需要帮助,为您执行此操作的工具,然后检查此处。我们可以将手动激活过程分为两部分。1-从现成的批处理文件确保已启用互联网。以管理员身份打开WindowsPowershell,然后输入以下内容按给出命令的顺序列出命令。输入密钥,(替换为密钥从上面的列表中)使用以下命令&lt;key&gt;slmgr/ipk&lt;key&gt;从这里下载通用门票并提取下载的文件。现在在Powershell中输入以下代码(Get-ItemProper

CentOS 7下OpenBLAS安装及CentOS 7 OpenSSL安装 CentOS 7下OpenBLAS安装及CentOS 7 OpenSSL安装 Feb 10, 2024 am 11:45 AM

LINUX作为一个开源操作系统,有着广泛的应用和用户群体,CentOS7是LINUX的一个分支版本,它是基于RedHatEnterpriseLinux(RHEL)源代码构建的,具有高度的稳定性和安全性,在CentOS7上安装和配置OpenBLAS和OpenSSL是许多开发者和系统管理员的常见需求,本文将详细介绍如何在CentOS7上安装和配置OpenBLAS和OpenSSL。OpenBLAS是一个开源的基于BLAS(BasicLinearAlgebraSubprograms)接口的高性能数学库,

使用java的String.length()函数获取字符串的长度 使用java的String.length()函数获取字符串的长度 Jul 25, 2023 am 09:09 AM

使用Java的String.length()函数获取字符串的长度在Java编程中,字符串是一种非常常见的数据类型,我们经常需要获取字符串的长度,即字符串中字符的个数。在Java中,我们可以使用String类的length()函数来获取字符串的长度。下面是一个简单的示例代码:publicclassStringLengthExample{publ

Java使用Random类的nextDouble()函数生成随机的双精度浮点数 Java使用Random类的nextDouble()函数生成随机的双精度浮点数 Jul 25, 2023 am 09:06 AM

Java使用Random类的nextDouble()函数生成随机的双精度浮点数Java中的Random类是一个伪随机数生成器,可以用来生成不同类型的随机数。其中,nextDouble()函数用于生成一个随机的双精度浮点数。在使用Random类之前,我们需要先导入java.util包。接下来我们可以创建一个Random对象,然后使用nextDouble()函数

python random库如何使用demo python random库如何使用demo May 05, 2023 pm 08:13 PM

pythonrandom库简单使用demo当我们需要生成随机数或者从一个序列中随机选择元素时,可以使用Python内置的random库。下面是一个带有注释的例子,演示了如何使用random库:#导入random库importrandom#生成一个0到1之间的随机小数random_float=random.random()print(random_float)#生成一个指定范围内的随机整数(包括端点)random_int=random.randint(1,10)print(random_int)#

如何解决 golang 中的 “undefined: bytes.Split” 错误? 如何解决 golang 中的 “undefined: bytes.Split” 错误? Jun 25, 2023 pm 02:02 PM

在Go语言中,bytes包是一个用于操作字节类型的包,并且它包含了许多有用的方法,比如Split()方法。不过,在使用Split()方法时,你可能会遇到“undefined:bytes.Split”的错误。这种错误通常是由于Go版本不兼容或缺少必要的依赖库等原因引起的。这篇文章将介绍一些解决这种错误的方法。方法一:升级Go版本如

See all articles