2012-06-22 22 views

回答

4

在很多情況下,一個簡單的uniqid(mt_rand(), true)會做隨機生成一個鹽。結合Blowfish應該給你一個相當不錯的密碼哈希。

替代品是僞隨機來源,例如/dev/urandomopenssl_pseudo_random_bytes()。還有一些服務可以爲您生成隨機數據(基於無線電主動降級)。

+0

我認爲這是openssl_random_pseudo_bytes()from [link](http://php.net/openssl_random_pseudo_bytes) –

2

考慮使用隨機鹽代替非隨機..也許你會發現一些有用的東西這篇文章http://www.gregboggs.com/php-blowfish-random-salted-passwords/

此外,在看看這篇文章http://codahale.com/how-to-safely-store-a-password/

一種方法是產生爲每個用戶提供獨特的鹽,並將該鹽存儲在DB中。

另一個好方法是,生成密碼散列的算法必須計算超過秒的鹽。更復雜的哈希算法將是 - 更多的問題將面對誰想要破解你的數據庫

+0

我不明白你的意思是「必須計算超過秒的鹽」。你的意思是執行時間應該超過一秒?請詳細說明這一點。 – nullability

+0

@nullability是的,超過一秒執行 – Ribtoks

3

使用這條線在PHP

$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)); 
1

可以使用microtime()函數在PHP中生成強鹽的人根據微秒生成一個數字,而不是秒,這使得用戶幾乎不可能與另一個用戶產生相同的鹽分。您也可以將此號碼與用戶的ID相乘。

也許md5(uniqid())已經足夠用於你的應用。

編輯:忘記提及uniqid()功能more_entropy參數。這將較小的相同字符串的機會,即使功能運行在同一個微秒的兩倍,所以編輯功能應該是這樣的:

$salt = md5(uniqid($user_id, TRUE)); 
相關問題