2017-09-27 74 views
0

我一直在尋找在bcrypt文檔中的代碼示例:如何節點bcrypt哈希/比較工作,因爲鹽是未知

bcrypt.hash(myPlaintextPassword, saltRounds, function(err, hash) { 
    // Store hash in your password DB. 
}); 

我不明白的是如何比較的密碼,如果我不知道鹽?

bcrypt.compare(myPlaintextPassword, hash, function(err, res) { 
    // res == true 
}); 

經過一番閱讀,我瞭解到hash已經包含鹽和成本。但是如果這種情況發生,一旦黑客得到這個哈希值,他可以使用彩虹表或其他東西來暴露密碼。

將散列和鹽分開存儲是一種更好的做法嗎?

這是一種處理密碼的安全方式嗎?

回答

1

您誤解了salt提供的安全性。沒有期望或意圖,鹽會被攻擊者保密 - 如果攻擊者獲得哈希密碼,他們也會得到鹽。但它仍然阻止他們使用彩虹桌或其他預先計算的攻擊,因爲他們沒有使用特定鹽生成的彩虹表。當然,他們可以進行暴力攻擊,但是bcrypt還有其他功能可以讓這種攻擊變得困難。