Password-Hashing

為什麼具有相同密碼的兩個 Argon 雜湊值不同?

  • December 10, 2017

有人可以向我解釋 libsodium 中的 ArgonHashString 函式返回什麼(我使用的是.net 埠)。

例如,我用相同的字元串呼叫了它兩次:

var foo1 = PasswordHash.ArgonHashString("f");
var foo2 = PasswordHash.ArgonHashString("f");

我得到了完全不同的答案:

"$argon2i$v=19$m=32768,t=4,p=1$rKEPCGqfhm7zQt8c2QBhRA$7oZHFjWhHdVg/31SottxDyVM5KA9+4IBc5qD5m9DNFI\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"$argon2i$v=19$m=32768,t=4,p=1$o8MmGW+GoaVcQvBfmPDE8A$3mHVQbZz3JuLI++MIBC4JOI+/G2oVtq75Jbqml8lbEM\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"

ArgonHashString呼叫 libsodium 函式,該函式crypto_pwhash_str會自動生成作為結果一部分的鹽值。

此函式返回一個字元串,當給定相同的密碼時,驗證函式將認為該字元串有效。

您不必關心字元串實際包含的內容。如果只是因為預設算法和參數可以更改。但是上面的保證永遠是真實的。

但實際上,如果兩次給出相同的密碼,字元串會有所不同。它包含一些隨機性,因此通過觀察使用者數據庫的散列密碼,您無法判斷 user1 和 user2 共享相同的密碼。

引用自:https://crypto.stackexchange.com/questions/39869