0

不知道为什么,但我想我完全不明白这是如何工作的......

我找到了一个示例脚本,其中包含:

echo crypt('abc123', '$2a$04$saltsaltsaltsaltsaltxx');

它声称给出输出:

$2a$04$saltsaltsaltsaltsaltxuK2.MS4sJd6ZjnuS0fp2eenjndo.g4hS

但是当我这样做时,我得到了相同的代码:

 $2pGiQ0v1IyNY

作为输出......到目前为止并没有真正向我解释任何事情,或者为什么我得到与我看到的示例不同的输出?

我正在尝试获取销售+哈希密码并将它们存储在每个用户的用户表中,但我没有遵循如何:

a)为每个用户生成一个随机盐

b)从中获取盐和哈希密码来存储它?

c)然后您如何检查它,例如登录页面

4

1 回答 1

2

来自 PHP 文档:

使用盐的河豚散列如下:“$2a$”,两位数的成本参数,“$”,以及来自字母表“./0-9A-Za-z”的 22 位数字。在 salt 中使用超出此范围的字符将导致 crypt() 返回零长度字符串。两位数的成本参数是底层基于 Blowfish 的散列算法的迭代计数的以 2 为底的对数,并且必须在 04-31 范围内,超出此范围的值将导致 crypt() 失败。

您不需要从散列密码中分离盐。您存储整个字符串(“$2a$04$saltsaltsaltsaltxuK2.MS4sJd6ZjnuS0fp2eenjndo.g4hS”),当您想验证提供的密码是否与您的哈希匹配时,您可以

if (crypt($form_password, $stored_hash) == $stored_hash) {
    // password is correct
}
于 2012-05-27T09:53:27.283 回答