日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

加密生成指定长度_3分钟短文 | PHP伪随机Token生成器,实地测试,效果感人!

發(fā)布時(shí)間:2025/3/11 php 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 加密生成指定长度_3分钟短文 | PHP伪随机Token生成器,实地测试,效果感人! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

引言

我們經(jīng)常可能會(huì)用到邀請(qǐng)碼,郵件驗(yàn)證碼,或者需要使用unique 字符串標(biāo)記用戶屬性的情況。

今天我們且不說高深的“全局唯一ID”的生成方案,我們說一個(gè)簡(jiǎn)單的,如何生成一個(gè)唯一的,隨機(jī)的,數(shù)組字母組成的字符串。

學(xué)習(xí)時(shí)間

PHP 有一個(gè)內(nèi)置函數(shù) uniqid,用于生成一個(gè)唯一的ID。該函數(shù)結(jié)構(gòu)形式:

string uniqid([ string $prefix = ""[, bool $more_entropy = false]] )

用于獲取一個(gè)帶前綴、基于當(dāng)前時(shí)間微秒數(shù)的唯一ID。

但是該方法所生成的ID并不是安全的,且依賴于本機(jī)的時(shí)間戳,有可能在同一微秒生成同一ID。所以安全起見,需要添加上 prefix 參數(shù),以示區(qū)別。

more_entropy 參數(shù)使生成的ID更具有唯一性,如果設(shè)置為 TRUE,uniqid() 會(huì)在返回的字符串結(jié)尾增加額外的煽(使用combined linear congruential generator)。

這就夠了嗎?這當(dāng)然不是最優(yōu)的解決方法。我們嘗試其他解決方案。使用 openssl 帶來的加密性和唯一性。

bin2hex(openssl_random_pseudo_bytes($bytes))

使用 openssl_random_pseudo_bytes 函數(shù)生成一個(gè)偽隨機(jī)字符串的字節(jié),然后使用 bin2hex 將其格式化為十六進(jìn)制的字符串。

生成的偽隨機(jī)字節(jié),其字節(jié)數(shù)由length參數(shù)確定。還指示是否使用了加密功能強(qiáng)的算法來生成偽隨機(jī)字節(jié),并通過可選的crypto_strongparameter來執(zhí)行此操作。 此種方法返回的參數(shù),很少情況下會(huì)出現(xiàn)false。

美中不足的是,這樣生成的數(shù)字字符串,只在[0-9][a-z]之間,不夠廣泛。我們嘗試加固這個(gè)生成方法,增強(qiáng)其魯棒性。

上述函數(shù)會(huì)生成一個(gè)區(qū)間位于 [$min, $max] 的隨機(jī)數(shù)字。然后調(diào)用該函數(shù)生成指定長度的字符串。

函數(shù) crypto_rand_secure 函數(shù)的實(shí)現(xiàn)方法,在PHP標(biāo)準(zhǔn)函數(shù)中,可以使用 rand / mt_rand 函數(shù)替代。

在PHP 7 中,系統(tǒng)提供了更好的函數(shù),可以替代 crypto_rand_secure 使用,就是 random_bytes 和 random_int。使用內(nèi)置函數(shù),我們將 getToken 函數(shù)改造如下:

當(dāng)然少不了的測(cè)試結(jié)果,我們批量生成一些 32 位長度的字符串。

寫在最后

本文深入探討了生成隨機(jī)數(shù)字,進(jìn)而生成指定長度的字符串,實(shí)現(xiàn)函數(shù)并進(jìn)行了測(cè)試。大家可以在機(jī)器環(huán)境進(jìn)行測(cè)試。

Happy coding :_)

我是 @程序員小助手 ,持續(xù)分享編程知識(shí),歡迎關(guān)注。 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的加密生成指定长度_3分钟短文 | PHP伪随机Token生成器,实地测试,效果感人!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。