站長資訊網
        最全最豐富的資訊網站

        PHP如何使用加密偽隨機數生成器

        本篇文章給大家介紹一下PHP使用加密偽隨機數生成器的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。

        PHP如何使用加密偽隨機數生成器

        今天我們來介紹的是 PHP 中的加密偽隨機數生成器(CSPRNG 擴展)。隨機數的生成其實非常簡單,使用 rand() 或者 mt_rand() 函數就可以了,但是我們今天說的這個則是使用了更復雜算法的一套隨機數生成器。rand() 已經不是很推薦使用了,mt_rand() 的生成速度更快一些,也是現在的主流函數,而加密的偽隨機數生成函數則是密碼安全的,速度會比 mt_rand() 略慢一點。它需要依賴操作系統的一些函數,這個我們后面再說。

        這個加密擴展已經集成在 PHP7 中,不需要特別的安裝,如果是 PHP7 以下的版本需要獨立安裝擴展。如果在測試時找不到下面介紹的函數,請檢查當前 PHP 的版本。

        偽隨機字符生成

        var_dump(bin2hex(random_bytes(5))); // string(10) "f28dc2bdd5" var_dump(random_bytes(5)); // string(5) "?"??"

        random_bytes() 每次調用都會生成不同內容的二進制字符串,而參數則是二進制的字節長度。直接獲取到的二進制數據是亂碼格式的,所以一般我們會需要使用 bin2hex() 來將二進制轉換成我們可以看懂的十六進制格式字符串。不過由此帶來的結果就是我們轉換之后的十六進制的字符長度是我們設定的字符長度的 2 倍。這個函數的作用,可以為我們生成安全的用戶密碼 salt 、 密鑰關鍵字 或者 初始化向量。

        random_bytes() 每次調用都會生成不同內容的字符串,而參數則是字符長度的隨機字符,在這里我們傳遞的是 5 ,返回了 10 個字符,可以看出這個參數是字符數量,而返回的其實是字節數量,對應一個字符占用兩個字節的返回形式。或者我們就直接記住它返回的就是參數的兩倍即可。至于這個函數的作用嘛,可以為我們生成安全的用戶密碼 salt 、 密鑰關鍵字 或者 初始化向量。

        偽隨機整數生成

        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() 這個函數的秒用,以后不用再自己去寫隨機生成 salt 的函數了,就像我們之間介紹密碼加鹽文章中 什么叫給密碼“加鹽”?如何安全的為你的用戶密碼“加鹽”? 的那個隨機字符生成函數(generateSalt)基本就可以用這個來替代了。是不是感覺收獲滿滿呢,學習的腳步從未停下,讓我們繼續一起探索更好玩的內容吧!!

        測試代碼:

        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視頻教程

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 久久精品亚洲男人的天堂| 奇米精品视频一区二区三区| 亚洲国产精品成人久久| 国产精品夜色视频一级区| 99久久人妻无码精品系列| 亚洲国产成人久久精品99| 国产精品自在欧美一区| 精品一区二区三区免费| 国产剧情国产精品一区| 一区二区精品在线| 久久精品国产亚洲AV麻豆网站 | 亚洲国产精品一区二区成人片国内 | 91精品国产91久久久久福利| 亚洲AV午夜福利精品一区二区 | 最新国产成人精品2024| 精品无码专区亚洲| 亚洲福利精品电影在线观看| 亚洲国产精品久久66| 国产国产精品人在线观看| 亚洲AV无码精品色午夜果冻不卡| 精品久久久久久无码中文字幕| 91精品国产高清久久久久久国产嫩草 | 久久国产成人精品国产成人亚洲| 国产精品国产欧美综合一区 | 久热这里只有精品视频6| 合区精品久久久中文字幕一区 | 欧美成人精品欧美一级乱黄一区二区精品在线| 97精品国产自在现线免费观看| 四虎永久在线精品国产免费| 久久99国产精品久久久| 欧美精品国产精品| 1区1区3区4区产品芒果精品| 亚洲精品电影网| 99精品人妻少妇一区二区| 人精品影院| 国产精品主播一区二区| 精品无码国产自产拍在线观看蜜 | 在线亚洲欧美中文精品| 亚洲精品亚洲人成人网| 色欲精品国产一区二区三区AV | 无码国产精品一区二区免费式芒果|