首頁 >後端開發 >php教程 >安全的儲存密碼該用哪些方式?

安全的儲存密碼該用哪些方式?

零下一度
零下一度原創
2017-06-23 14:45:042106瀏覽

一:基礎:加鹽哈希( Hashing with Salt)

我們已經知道,惡意攻擊者使用查詢表和彩虹表,破解普通哈希加密有多快。我們也已經

了解到,使用隨機加鹽雜湊可以解決這個問題。但是,我們使用什麼樣的鹽值,又如何將其

混入密碼中?

 

鹽值應該使用加密的安全偽隨機數產生器( Cryptographically Secure Pseudo-Random

Number Generator,CSPRNG )產生。 CSPRNG和普通的偽隨機數產生器有很大不同,

如「 C 」語言的rand()函數。顧名思義, CSPRNG 被設計成用於加密安全,這意味著它能提

供高度隨機、完全不可預測的隨機數。我們不希望鹽值能夠被預測到,所以必須使用 CSPRNG 。

下表列出了一些目前主流程式設計平台的 CSPRNG 方法。

Any language on GNU/Linux or Unix
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

Read from /dev/random or /dev/urandom

#每個使用者的每一個密碼都要使用獨一無二的鹽值。使用者每次建立帳號或變更密碼時,密碼應採用一個新的隨機鹽值。 永遠不要重複使用某個鹽值。這個鹽值也應該足夠長,以使有足夠的鹽值能用於哈希加密。一個經驗規則是,鹽值至少要跟雜湊函數的輸出一樣長。此鹽應和密碼雜湊一起儲存在使用者帳號表中。

  1. 儲存密碼的步驟:

  2. #使用 CSPRNG 產生足夠長的隨機鹽值。
  3. 將鹽值混入密碼,並使用標準的密碼雜湊函數進行加密,如Argon2、 bcrypt 、 scrypt 或 PBKDF2 。

將鹽值和對應的雜湊值一起存入使用者資料庫。

  1. 校驗密碼的步驟:

  2. #從資料庫檢索出使用者的鹽值和對應的哈希值。
  3. 將鹽值混入使用者輸入的密碼,並且使用通用的雜湊函數進行加密。

###比較上一個步驟的結果,是否和資料庫儲存的雜湊值相同。如果它們相同,則表示密碼是正確的;否則,該密碼錯誤。 ############ ####

以上是安全的儲存密碼該用哪些方式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn