新聞中心
這篇文章主要介紹了PHP怎么使用加密偽隨機數(shù)生成器,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供龍井網站建設、龍井做網站、龍井網站設計、龍井網站制作等企業(yè)網站建設、網頁設計與制作、龍井企業(yè)網站模板建站服務,10余年龍井做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。
今天我們來介紹的是 PHP 中的加密偽隨機數(shù)生成器(CSPRNG 擴展)。隨機數(shù)的生成其實非常簡單,使用 rand() 或者 mt_rand() 函數(shù)就可以了,但是我們今天說的這個則是使用了更復雜算法的一套隨機數(shù)生成器。rand() 已經不是很推薦使用了,mt_rand() 的生成速度更快一些,也是現(xiàn)在的主流函數(shù),而加密的偽隨機數(shù)生成函數(shù)則是密碼安全的,速度會比 mt_rand() 略慢一點。它需要依賴操作系統(tǒng)的一些函數(shù),這個我們后面再說。
這個加密擴展已經集成在 PHP7 中,不需要特別的安裝,如果是 PHP7 以下的版本需要獨立安裝擴展。如果在測試時找不到下面介紹的函數(shù),請檢查當前 PHP 的版本。
偽隨機字符生成
var_dump(bin2hex(random_bytes(5))); // string(10) "f28dc2bdd5" var_dump(random_bytes(5)); // string(5) "?"??"
random_bytes() 每次調用都會生成不同內容的二進制字符串,而參數(shù)則是二進制的字節(jié)長度。直接獲取到的二進制數(shù)據(jù)是亂碼格式的,所以一般我們會需要使用 bin2hex() 來將二進制轉換成我們可以看懂的十六進制格式字符串。不過由此帶來的結果就是我們轉換之后的十六進制的字符長度是我們設定的字符長度的 2 倍。這個函數(shù)的作用,可以為我們生成安全的用戶密碼 salt 、 密鑰關鍵字 或者 初始化向量。
random_bytes() 每次調用都會生成不同內容的字符串,而參數(shù)則是字符長度的隨機字符,在這里我們傳遞的是 5 ,返回了 10 個字符,可以看出這個參數(shù)是字符數(shù)量,而返回的其實是字節(jié)數(shù)量,對應一個字符占用兩個字節(jié)的返回形式。或者我們就直接記住它返回的就是參數(shù)的兩倍即可。至于這個函數(shù)的作用嘛,可以為我們生成安全的用戶密碼 salt 、 密鑰關鍵字 或者 初始化向量。
偽隨機整數(shù)生成
var_dump(random_int(100, 999)); var_dump(random_int(-1000, 0)); // int(900) // int(-791)
對于整數(shù)數(shù)字的生成就更簡單了,為 random_int() 函數(shù)提供兩個參數(shù),也就是隨機整數(shù)的范圍就可以了。其實和 mt_rand() 的用法一樣。
生成來源
上述兩種加密偽隨機函數(shù)的生成來源都是依賴于操作系統(tǒng)的,具體如下:
在 Windows 系統(tǒng),會使用 CryptGenRandom() 函數(shù)。從7.2.0開始使用CNG-API
在 Linux 系統(tǒng),會使用 Linux getrandom(2) 系統(tǒng)調用
在其他系統(tǒng),會使用 /dev/urandom
否則將拋出異常
異常情況
這兩個函數(shù)也有相應的異常情況會出現(xiàn),比如上面找不到生成來源的話就會拋出異常,當然,除了這個之外還會有其它的因素也會導致異常的發(fā)生。
如果找不到適當?shù)碾S機性來源,將拋出異常
如果給定的參數(shù)無效,將引發(fā) TypeError
如果給定的字節(jié)長度無效,將引發(fā)錯誤
總結
今天的內容非常簡單,而且還發(fā)現(xiàn)了 random_bytes() 這個函數(shù)的秒用,以后不用再自己去寫隨機生成 salt 的函數(shù)了,就像我們之間介紹密碼加鹽文章中 什么叫給密碼“加鹽”?如何安全的為你的用戶密碼“加鹽”? 的那個隨機字符生成函數(shù)(generateSalt)基本就可以用這個來替代了。是不是感覺收獲滿滿呢,學習的腳步從未停下,讓我們繼續(xù)一起探索更好玩的內容吧!!
測試代碼:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202007/source/PHP%E7%9A%84%E5%8A%A0%E5%AF%86%E4%BC%AA%E9%9A%8F%E6%9C%BA%E6%95%B0%E7%94%9F%E6%88%90%E5%99%A8%E7%9A%84%E4%BD%BF%E7%94%A8.php
感謝你能夠認真閱讀完這篇文章,希望小編分享的“PHP怎么使用加密偽隨機數(shù)生成器”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關知識等著你來學習!
網站題目:PHP怎么使用加密偽隨機數(shù)生成器
網站網址:http://ef60e0e.cn/article/ghsgio.html