gpt4 book ai didi

php - crypt($pass, '$2y$09$salt' ) === crypt($pass, crypt($pass, '$2y$09$salt' )) 在 PHP 中如何运行?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:00:51 26 4
gpt4 key购买 nike

我确实对 crypt() PHP 函数感到困惑。

当第二个 crypt 显然使用不同的第二个参数时,以下两个 crypt 函数如何给出相同的输出?差异盐意味着差异哈希对吗?

echo crypt("password", '$2y$09$anexamplestringforsalt$')."\n<br>";
echo crypt("password", crypt("password", '$2y$09$anexamplestringforsalt$'))."\n<br>";

输出:

$2y$09$anexamplestringforsale/.K.VdgECUVEd9N4ja3u1WtgPi5BXZq 

最佳答案

原因是因为盐是 crypt 提供的散列输出的一部分。

$2y$09$anexamplestringforsale/.K.VdgECUVEd9N4ja3u1WtgPi5BXZq 

它分为几个部分:

  • 2y - 算法标识符 (bcrypt)
  • 09 - 成本参数
  • anexamplestringforsale - 盐
  • /.K.VdgECUVEd9N4ja3u1WtgPi5BXZq - 哈希

这导致了一个很好的特性,即能够直接使用结果哈希作为验证调用中的盐。

$hash = crypt($password, $salt);

if ($hash === crypt($password, $hash)) {

现在您不需要单独存储算法、成本或盐。只需将它们直接存储在哈希结果中即可。简单。

此外,我强烈建议您使用简化的密码哈希 API,它专门用于缓解这些问题:password_hash() .

关于php - crypt($pass, '$2y$09$salt' ) === crypt($pass, crypt($pass, '$2y$09$salt' )) 在 PHP 中如何运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22668813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com