bcrypt如何"know"给定哈希是否与给定密码相关联?



给定密码P和哈希值H,bcrypt.compare(P, H)函数告诉您H是否是P的bcrypt哈希值

问题:bcrypt.compare是如何做到上述的?这对我来说很神秘,因为P可能与许多不同的哈希值有关,而bcrypt本身似乎没有任何"内存"。为P创建的哈希值

(附加问题:我是否可以假设上面的假设意味着每个bcrypt哈希都与一个密码相关联?或者我错了——一个散列可以与多个密码相关联吗?)

哈希:

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接受原始密码和期望的散列来匹配密码,因此它只是从期望的散列中提取盐,并将其重新应用于原始密码。

最新更新