一:基礎:加鹽哈希( Hashing with Salt)
我們已經知道,惡意攻擊者使用查詢表和彩虹表,破解普通哈希加密有多快。我們也已經
了解到,使用隨機加鹽雜湊可以解決這個問題。但是,我們使用什麼樣的鹽值,又如何將其
混入密碼中?
鹽值應該使用加密的安全偽隨機數產生器( Cryptographically Secure Pseudo-Random
Number Generator,CSPRNG )產生。 CSPRNG和普通的偽隨機數產生器有很大不同,
如「 C 」語言的rand()函數。顧名思義, CSPRNG 被設計成用於加密安全,這意味著它能提
供高度隨機、完全不可預測的隨機數。我們不希望鹽值能夠被預測到,所以必須使用 CSPRNG 。
下表列出了一些目前主流程式設計平台的 CSPRNG 方法。
Platform | CSPRNG |
---|---|
PHP | mcrypt_create_iv, openssl_random_pseudo_bytes |
Java | java.security.SecureRandom |
Dot NET (C#, VB) | System.Security.Cryptography.RNGCryptoServiceProvider |
Ruby | SecureRandom |
Python | os.urandom |
Python | os.urandom |
Perl | Math::Random::Secure |
C/C++ (Windows API) | CryptGenRandom |
#每個使用者的每一個密碼都要使用獨一無二的鹽值。使用者每次建立帳號或變更密碼時,密碼應採用一個新的隨機鹽值。 永遠不要重複使用某個鹽值。這個鹽值也應該足夠長,以使有足夠的鹽值能用於哈希加密。一個經驗規則是,鹽值至少要跟雜湊函數的輸出一樣長。此鹽應和密碼雜湊一起儲存在使用者帳號表中。
儲存密碼的步驟:
將鹽值和對應的雜湊值一起存入使用者資料庫。
校驗密碼的步驟:
以上是安全的儲存密碼該用哪些方式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!