给定密码P
和哈希值H
,bcrypt.compare(P, H)
函数告诉您H
是否是P
的bcrypt哈希值
问题:bcrypt.compare
是如何做到上述的?这对我来说很神秘,因为P
可能与许多不同的哈希值有关,而bcrypt
本身似乎没有任何"内存"。为P
创建的哈希值
哈希:
string BCryptHashPassword(password)
{
Byte[] salt = GenerateSomeSalt();
return DoTheHash(password, salt);
}
验证:
Boolean BCryptVerifyPassword(password, expectedHash)
{
Byte[] salt = ExtractSaltFromExpectedHash(expectedHash);
String actualHash = DoTheHash(password, salt);
return (actualHash == expectedHash);
}
它用原始的盐再次散列密码,并比较它们。}
BCrypt不仅将哈希保存在H
中,还保存了用于创建哈希的盐(这里有完整的解释)。
Match接受原始密码和期望的散列来匹配密码,因此它只是从期望的散列中提取盐,并将其重新应用于原始密码。