2008-11-10 65 views
173

bCrypt's javadoc對如何加密密碼驗證碼:我需要用bcrypt存儲鹽嗎?

String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt()); 

要檢查明文密碼是否匹配一個先前已散列,使用checkpw方法:

if (BCrypt.checkpw(candidate_password, stored_hash)) 
    System.out.println("It matches"); 
else 
    System.out.println("It does not match"); 

這些代碼片段暗示對我來說,隨機產生的鹽被扔掉。這是這種情況,還是這只是一個誤導性的代碼片段?

回答

201

鹽被合併到哈希中(以base64樣式格式編碼)。

例如,在傳統的Unix密碼中,salt被存儲爲密碼的前兩個字符。其餘字符表示散列值。檢查器函數知道這一點,並將哈希分開以使鹽退出。

+58

鹽是納入密碼。所以你不必保存鹽。 – 2008-11-10 08:57:08