2016-03-08 45 views
2

n.b.我不是一個加密專家(這就是爲什麼我使用像NaCl這樣的庫)。使用libsodium-net時,我不需要生成和存儲鹽嗎?

從我讀到的主題來看,將用戶密碼存儲在數據庫中最安全的方法是存儲散列和用於生成散列的鹽。我決定使用libsodium-net來達到這個目的,但現在我在這個問題上留下了一個問題:我不需要生成和存儲鹽嗎?我問,因爲libsodium-net包含這些功能:

// this uses the default Strength.Interactive hashing algorithm 
var hash = PasswordHash.ScryptHashString(password); 
var isValid = PasswordHash.ScryptHashStringVerify(hash, password); 

當生成或驗證散列時,似乎並沒有必要使用salt。實際上,ScryptHashString和ScryptHashStringVerify沒有重載方法接受鹽。我覺得我在這裏錯過了一些明顯的東西。我是嗎?或者,libsodium-net可以避免使用鹽嗎?

回答

3

答案在documentation。從PasswordHash.ScriptHashString(password)返回的字符串包含salt(以及其他一些參數),因此不需要單獨存儲鹽。

+2

是正確的。您不需要存儲鹽或其他參數(最大內存和最大操作數)。一切已經存儲在返回的字符串中。鹽本身是由'ScryptHashString()'自動生成的。 –

相關問題