【问题标题】:(PHP) How to correctly implement crypt()(PHP) 如何正确实现 crypt()
【发布时间】:2011-01-15 04:43:10
【问题描述】:

这是来自PHP manual page for crypt()的示例:

<?php
$password = crypt('mypassword'); // let the salt be automatically generated

/* You should pass the entire results of crypt() as the salt for comparing a
   password, to avoid problems when different hashing algorithms are used. (As
   it says above, standard DES-based password hashing uses a 2-character salt,
   but MD5-based hashing uses 12.) */
if (crypt($user_input, $password) == $password) {
   echo "Password verified!";
}
?>

为什么会这样?我认为'mypassword' 是我希望实际管理员使用的密码。所以我先将其加密,并将其设置为等于$password。显然,我必须将其存储在数据库中。但在接下来的几行中,它被用作盐和我正在比较的东西,我不明白crypt($user_input, $password) 怎么可能等于$password,如果在后一种情况下我最好有正确的密码与$user_input 相同,但与$password 相比,与$password 进行了比较。如果最后一行是

,对我来说会更有意义
if (crypt($user_input) == $password) {
   echo "Password verified!";
}

我不明白什么?

【问题讨论】:

  • 您应该使用更高级的技术,例如 md5、sha1 等。
  • 哈哈。哈哈。哈哈。哈哈。如果你能和我一起踏上这段史诗般的旅程,我的朋友。 stackoverflow.com/questions/2235158/…

标签: php crypt


【解决方案1】:

crypt 是一个单向函数,返回一个已经包含盐的字符串。输出类似于/etc/shadow 中存储的内容。

来自php.net的示例:

<?php
echo 'result: ' . crypt('somepassword');
echo 'result: ' . crypt('somepassword');
echo 'result: ' . crypt('somepassword');
?>

result: $1$K2D8DGwq$b05uO37aMwO4rnDlB9Rsi1
result: $1$aPBvu2y.$213YVEs8/5m.jMCXSScly/
result: $1$dW3Xu2p6$nuCtJe2zzlgBMLxN2oZCx/

当将用户输入与 crypt 结果进行比较时,该函数会自动从字符串中提取盐。

【讨论】:

  • 完美回答你的问题。 crypt() 输出一个包含盐和哈希结果的字符串。当您将该字符串作为盐传递给它时,它知道只提取盐部分并忽略散列部分。它仍然返回一个包含盐和哈希的字符串。所以这些字符串可以直接比较。
  • 哦,所以通过给它 $password 作为盐,它只提取盐部分,这是用于原始 crypt() 调用的盐,所以我不需要存储我的数据库中的盐,只是散列的密码?
  • 是的,很抱歉,当我阅读它时它对我来说没有意义,但 gnud 重新措辞得足够好,所以我认为我明白了
  • @AndiDog 我知道这是一篇旧帖子,但我认为在这里提问比在上面发表我自己的帖子更有意义,但这样做并不不安全,因为其他人有盐用来?我是散列新手,所以我只是想了解为什么这样做背后的逻辑。我想弄清楚是否使用 crypt() 。再次感谢。
  • @Andy:没有人得到盐分。您从crypt 获得的结果存储在一个不能公开访问的密码数据库(如/etc/shadow)中。当然,黑客可能会窃取它,但盐会阻止他实际破解密码,并且绝对不会同时破解许多密码。关键是盐可以明文存储,其目的是防止简单的密码攻击,如暴力破解。
猜你喜欢
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
  • 2012-06-16
  • 2015-02-27
  • 2013-07-22
  • 2021-08-17
  • 2011-07-31
相关资源
最近更新 更多