hash_equals 是否比较使用 `sha512` 散列的字符串?

Does hash_equals compare strings hashed with `sha512`?

我需要在数据库中存储一个令牌,并将用户提供的令牌与数据库令牌相匹配,我正在使用 sha512 作为散列令牌。我将这两个标记与简单的 == 运算符进行比较。

if($usertoken == $dbtoken) {

}

但有人建议我改用 hash_equals(),因为它可以防止定时攻击(额外的安全性),bcrypt 用于散列令牌。所以我只想知道 hash_equals 比较字符串与 sha512 散列还是我必须使用 bcrypt?

尽管名称如此,但此函数与散列无关。

它比较两个字符串是否相等,仅此而已。您可以为它提供两个包含任意字符序列的字符串,无论它们代表纯文本密码还是使用您选择的算法散列的密码,无论是 bcrypt 还是 sha512.