【问题标题】:How do I effectively use crypt()我如何有效地使用 crypt()
【发布时间】:2011-10-09 20:23:15
【问题描述】:

我不理解php.net 的文档。在针对原始加密进行测试时,他们似乎使用加密版本的密码作为盐。

当我插入没有可选第二个参数(盐)的 crypt 时,我会得到相同密码的不同加密版本。这是预期的行为吗?

但是,如果我插入“d4”的第二个参数,那么对于相同的密码输入,我会得到相同的加密密码。预期行为。

在注册时插入之前:

$pass = crypt('$pass', 'd4'); // after this I insert $pass into the mysql table

登录测试:

$pass = crypt($pass, 'd4'); // after this I test $pass against the mysql table

PHP.net 文档:

<?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!";
}
?> 

这是如何工作的?

【问题讨论】:

  • “看来他们正在使用加密版本的密码作为盐”你在哪里看到的?
  • 代码贴在上面 - 当原始密码加密没有加盐时,他们为什么用密码加盐用户输入?

标签: php encryption


【解决方案1】:

由于 crypt() 只使用 salt 参数的前两个字符(或任何 CRYPT_SALT_LENGTH ),因此传入加密密码(其中第一个字符是最初用于加密它的 salt)做正确的事.

如果没有传入盐参数,则生成并使用随机盐。

【讨论】:

  • 随机加盐不会使加密密码无法恢复吗?
  • crypt 是单向的。当您获得要测试的密码时,您将crypt 它与原始盐并比较加密值。按照设计,您无法在通过crypt 运行密码后恢复密码,除非您通过暴力猜测直到找到它。
  • 在 php.net 示例中,存储的密码不使用 salt,当他们针对密码进行测试时,他们使用 user_input 作为 salt,这可能是他们文档中的错误,我以前见过。
  • 首次保存密码时,应使用随机盐。当您检查作为密码发送的内容是否与最初发送的相同时,您将加密密码(实际上是盐)(的前两个字符)作为盐传递给 crypt() 函数,并且如果给出的密码与最初给出的密码相同,它将为加密密码返回相同的值,如果新的假定密码与原始密码不同,它将返回不同的答案(以相同的两个盐字符开头)。
  • 令人困惑的是,即使省略了 salt 参数,salt 仍然会自动生成(在这种情况下不是随机生成)并作为加密密码的前两个字母插入......所以它是自我描述的,即加密的密码包含解释它是如何加密的数据。
【解决方案2】:

如果您的问题是……对于相同的密码/输入,使用某些加密密码返回不同的加密字符串是否正常?答案是肯定的。不确定你指的是什么盐。盐就是盐。最后,它是一种催眠剂,没有任何意义。不建议使用密码或加密形式的密码作为盐,但通常使用短语的一些随机散列(base64)。如果没有,请告诉我,我会再试一次。

【讨论】:

  • 好的。我想我只需在我的代码中添加两个 crypt() 语句,一个用于插入密码,一个用于测试它。在上面添加。
  • 您是否想要一种安全的方式将用户密码以单向加密形式存储在数据库中,以便以后在下次登录时进行验证?
  • 根据 Headfirst Mysql/PHP 这是要走的路。
  • 尝试取密码的md5或sha1,在各个地方注入盐。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 2016-08-09
  • 2022-01-05
  • 2023-04-03
  • 2012-05-25
  • 1970-01-01
  • 2011-07-09
相关资源
最近更新 更多