2013-03-25 74 views
0

我想問一下,是否有可能爲每個用戶生成一個獨特的鹽,然後散列它,就像 sha1(sha1($password . $salt)) 那麼$ salt是一個隨機生成的字符串?爲每個用戶生成獨特的SALT?

如果是,我如何在登錄時加密密碼?

Xenforo使用這個,我想知道他們如何加密密碼,如果他們爲每個用戶使用獨特的鹽?

非常感謝。

+0

http://stackoverflow.com/a/2235548/251311 – zerkms 2013-03-25 00:36:41

回答

5

Don't make your own password hashing algorithm。當你的數據庫被破壞時,它會很容易被破解,你的用戶不會意識到他們的密碼被竊取了。

Bcrypt等良好測試散列已經這樣做了:

>>> bcrypt.generate_password_hash('password', 15) 
    '$2a$15$bzaLXuer1C8dtSckDp3AI.eOoL/nOTsSdpjEMyDMcJ3ZQELdRcLzq' 
>>> bcrypt.generate_password_hash('password', 15) 
    '$2a$15$Ye.cFInKhzo1KvAJGSi6yORV5uEqeW.Z1oAhdfi.163Psz4YPA3CO' 

隨機鹽和循環數被存儲在散列本身內,由分隔符,它可以讓恆定時間的密碼檢查分離函數從生成的哈希字符串中挑選鹽。

如果由於某種其他原因,你需要創建安全的隨機字符串,使用openssl_random_pseudo_bytes()

$bytes = openssl_random_pseudo_bytes(64, true); 
$hex = bin2hex($bytes); 
相關問題