2012-07-11 59 views
2

我試圖從crackstation.net實現密碼散列/醃製算法,但我不確定如何實現它。從crackstation.net實現密碼散列/醃製算法

在用戶註冊時存儲密碼似乎與將密碼傳遞到create_hash()一樣簡單。

$password = create_hash($_POST['Password']; 

我不是跟隨如何驗證用戶登錄。 validate_password($ password,$ good_hash)返回true或false,並將$ password作爲參數,所以除了第二個參數$ good_hash之外,它看起來似乎沒有什麼意思。這個參數來自哪裏?

我的理解是,密碼在每次使用時變成散列值,並且散列值是存儲和比較的值。那麼爲什麼我會同時擁有$ password和$ good_hash值呢?

的功能快速瀏覽:

function create_hash($password){ 
    calls pbkdf2() 
} 

function validate_password($password, $good_hash){ 
    calls pbkdf2() 
    calls slow_equals() 
} 

function slow_equals($a, $b){ 
} 

function pbkdf2($algorithm, $password, $salt, $count, $key_length, $raw_output = false){ 
} 

當然這種不同的,更好的方法也將是一種有益的。 謝謝

+1

我會假設$ good_hash是存儲的散列密碼,並且$ password是提交登錄的原始密碼 – 2012-07-11 03:17:15

+0

不要自己扮演角色,請使用[PHPass](http://stackoverflow.com/questions/1581610/how-我的用戶密碼安全/ 1581919#1581919) – Jacco 2012-07-12 10:48:32

+1

兩個PBKDF2注意事項:首先,儘可能使用高迭代次數,並在峯值負載期間保持足夠的性能。其次,永遠不要求比本機散列更多的輸出長度(SHA-1是20字節,SHA-224是28字節,SHA-256是32字節,SHA-384是48字節,而SHA-512是64字節)。一種不同的方法是password_hash()和password_verify(),從5.5開始可以在PHP中使用,並且從5.3.7開始使用兼容性庫,每個[PHP.net密碼散列常見問題](http://www.php.net/manual /en/faq.passwords.php)。 – 2014-03-25 02:51:58

回答

2

good_hash此時已經存儲在數據庫中,並且是已知的「良好散列」。從數據庫中檢索並將其與password進行比較,該用戶已被提交,現在已經使用相同算法進行散列處理。

+0

因此,我只是檢索存儲在數據庫中的散列,並使用從$ _POST獲取的原始密碼傳遞它。很明顯,男孩現在感覺很傻。 – Mason240 2012-07-11 03:23:58