首頁 後端開發 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