河豚地穴混乱

时间:2012-05-26 20:42:39

标签: php

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

我找到了一个示例脚本:

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

它声称提供输出:

$2a$04$saltsaltsaltsaltsaltxuK2.MS4sJd6ZjnuS0fp2eenjndo.g4hS

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

 $2pGiQ0v1IyNY

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

来自PHP文档:

  

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

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

if (crypt($form_password, $stored_hash) == $stored_hash) {
    // password is correct
}