2013-10-10 64 views
3

我剛剛閱讀了PHP 5.5中的新功能,它包含新的密碼哈希功能(http://www.php.net/manual/en/function.password-hash.php)。現在,如果您查看描述,則默認操作是如果您未指定密碼,則會隨機生成密碼salt。PHP 5.5的新password_hash函數中的隨機生成的密碼salt如何有用?

但我不明白這是如何有用。因爲如果你正在密碼安全存儲和鹽是隨機的。然後,當你運行字符串用戶輸入密碼時,如果每次salt不同,則每次得到的散列值都會有所不同。因此,您將無法成功比較輸入的有效密碼與存儲的密碼哈希副本。

那麼這怎麼能有用呢?

+2

我認爲鹽值包含在散列中。 –

+0

'Blowfish:$ 2a $ 07 $ usesomesillystringfore2uDLvp1Ii2e。/ U9C8sBjqp8I90dH6hi'該字符串有算法簽名+鹽+散列 –

回答

8

鹽包含在散列值中。

<?php 

$hash = password_hash("password", PASSWORD_DEFAULT, ['salt' => 'saltsaltsaltsaltsaltsa']); 
print_r(password_get_info($hash)); 
echo $hash; 

輸出:

Array 
(
    [algo] => 1 
    [algoName] => bcrypt 
    [options] => Array 
     (
      [cost] => 10 
     ) 

) 

$2y$10$saltsaltsaltsaltsaltsOPRDjePxJkNp7mjBEve63IqKPFT7ehNG 

正如你所看到的,哈希函數存儲有關的哈希本身散列處理的信息。 password_verify()函數然後解析hash並根據此信息驗證密碼。

+1

太棒了,我沒有看到password_verify函數。這使得現在更有意義。 – pthurmond