PHP算法——生成唯一字符串


經常遇到忘記密碼的情況,點擊一下忘記密碼,然后收到更改密碼的鏈接,連接中往往都會有一段很長而且很亂的字符串。試想一下,如果出現了重復的字符串,那豈不是把別人的密碼給重置了?

所以產生唯一數對於網站的安全性很重要。

目前PHP能產生唯一數的方法可以采用散列值、隨機數、時間等方法,下面是我自己測試的唯一數,個人推薦GUID。

方法一:

<?PHP $str = uniqid(mt_rand(),1); echo 'sha1: ',sha1($str); echo '<br>'; echo 'MD5: ',md5($str); ?>

采用uniqid函數,配合mt_rand隨機函數,最后使用散列值得出最終唯一值。

但是通過測試中,發現隨機數的唯一性有些相同部分,大概有11位相同的(但無大礙)

第二種方法:GUID

<?PHP echo sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535)); echo "<br>"; echo sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535)); echo "<br>"; echo sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535)); echo "<br>"; echo sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535)); ?>

關於UUID的介紹可以參考:http://www.cnblogs.com/ghj1976/archive/2011/09/21/2184029.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM