Php 为什么crypt()用相同的盐返回不同的哈希值?

Php 为什么crypt()用相同的盐返回不同的哈希值?,php,encryption,hash,salt,crypt,Php,Encryption,Hash,Salt,Crypt,你可以看到我之前生成了一个22个字符的随机salt,我知道PHPASS的所有内容,mt_rand()不是CSPRNG,等等。让我困惑/担心的是为什么crypt()(给定$password='admin')即使使用静态salt也会生成不同的散列。您可以看到,我已经打印了substr($storedpass,60),它生成了正确的salt,但随后运行crypt()函数(使用相同的参数创建初始$storedpass),它生成了不同的结果,破坏了一个(相对较小且非关键任务)的身份验证我的应用程序…您似乎

你可以看到我之前生成了一个22个字符的随机salt,我知道PHPASS的所有内容,mt_rand()不是CSPRNG,等等。让我困惑/担心的是为什么crypt()(给定$password='admin')即使使用静态salt也会生成不同的散列。您可以看到,我已经打印了substr($storedpass,60),它生成了正确的salt,但随后运行crypt()函数(使用相同的参数创建初始$storedpass),它生成了不同的结果,破坏了一个(相对较小且非关键任务)的身份验证我的应用程序…

您似乎正在将$password参数作为(未定义)发送到函数

这将生成此哈希:

$2a$08$143cd669b02e155c3cca6eM3k8s9BdE4jErJXJ8wSxshJDPcJQVPW
$2a$08$143cd669b02e155c3cca6eEiYm6ilW1ZC1PBS07LOh2XSq1NODSKK
143cd669b02e155c3cca6e
但是(例如)如果您运行以下命令:

$2a$08$143cd669b02e155c3cca6eM3k8s9BdE4jErJXJ8wSxshJDPcJQVPW

似乎您正在将$password参数作为(未定义)发送到函数

这将生成此哈希:

$2a$08$143cd669b02e155c3cca6eM3k8s9BdE4jErJXJ8wSxshJDPcJQVPW
$2a$08$143cd669b02e155c3cca6eEiYm6ilW1ZC1PBS07LOh2XSq1NODSKK
143cd669b02e155c3cca6e
但是(例如)如果您运行以下命令:

$2a$08$143cd669b02e155c3cca6eM3k8s9BdE4jErJXJ8wSxshJDPcJQVPW

建议将整个散列作为salt传入:PHP将为您处理子字符串等。值60与salt有什么关系?为什么不使用常量?@DarkXphenomenon那篇文章有很多实质性的优点,但仍然没有回答这个问题。建议将整个散列作为salt传入:PHP将为您处理子字符串等。该值60与salt有什么关系?你为什么不使用常量?@DarkXphenomenon那篇文章有很多好处,但仍然没有回答这个问题。谢谢你的回答,但我已经验证了$password正在打印“admin”,无论是在我调用我构建的blowfish()函数的控制器中,还是在该函数中。即使设置了,我也会看到不同的散列…但您必须找到或帮助我们帮助您找到密码未定义的原因。你能告诉我你是如何调用这个函数的吗?谢谢你的回答,但是我已经验证了$password正在打印“admin”,无论是在我调用我构建的blowfish()函数的控制器中,还是在该函数中。即使设置了,我也会看到不同的散列…但您必须找到或帮助我们帮助您找到密码未定义的原因。你能告诉我你是如何调用这个函数的吗?
$2a$08$143cd669b02e155c3cca6eEiYm6ilW1ZC1PBS07LOh2XSq1NODSKK143cd669b02e155c3cca6e
$2a$08$143cd669b02e155c3cca6eEiYm6ilW1ZC1PBS07LOh2XSq1NODSKK
$2a$08$143cd669b02e155c3cca6eEiYm6ilW1ZC1PBS07LOh2XSq1NODSKK
143cd669b02e155c3cca6e
1