gpt4 book ai didi

php - 在 PHP 中使用 crypt() 比较密码

转载 作者:IT王子 更新时间:2023-10-29 00:12:01 26 4
gpt4 key购买 nike

我需要了解此功能的基础知识。对于河豚算法,php.net 文档指出:

Blowfish hashing with a salt as follows: "$2a$", a two digit cost parameter, "$", and 22 base 64 digits from the alphabet "./0-9A-Za-z". Using characters outside of this range in the salt will cause crypt() to return a zero-length string

因此,根据定义,这不应该起作用:

echo crypt('rasmuslerdorf', '$2a$07$usesomadasdsadsadsadasdasdasdsadesillystringforsalt$');

然而,它吐出:

$2a$07$usesomadasdsadsadsadaeMTUHlZEItvtV00u0.kb7qhDlC0Kou9e

似乎 crypt() 已将 salt 本身的长度切割为 22。有人可以解释一下吗?

我无法理解此功能的另一个方面是当他们使用 crypt() 比较密码时。 http://php.net/manual/en/function.crypt.php (看例子#1)。这是否意味着如果我使用相同的盐来加密我所有的密码,我必须先加密它?即:

$salt = "usesomadasdsadsadsadae";
$salt_crypt = crypt($salt);

if (crypt($user_input, $salt) == $password) {
// FAIL WONT WORK
}

if (crypt($user_input, $salt_crypt) == $password) {
// I HAVE TO DO THIS?
}

谢谢你的时间

最佳答案

以下代码示例可能会回答您的问题。

要使用 Blowfish 生成哈希密码,您首先需要生成一个盐,它以 $2a$ 开头,后跟迭代计数和 22 个字符的 Base64 字符串。

$salt = '$2a$07$usesomadasdsadsadsadasdasdasdsadesillystringfors';
$digest = crypt('rasmuslerdorf', $salt);

将整个 $digest 存储在数据库中,它同时具有 salt 和 digest。

比较密码时,就这样做,

  if (crypt($user_input, $digest) == $digest)

您正在重复使用摘要作为盐。 crypt 从算法标识符中知道 salt 有多长。

关于php - 在 PHP 中使用 crypt() 比较密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3135524/

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