【问题标题】:PHP crypt() always failing?PHP crypt() 总是失败?
【发布时间】:2013-07-31 20:55:15
【问题描述】:

我对加密和密码等还很陌生,而且我这里有一些可疑的代码似乎失败了。我创建了一个新用户并将他们的密码插入到 mysql 中。插入的密码是

的输出
crypt( $user_input );

当我检索该行并运行以下代码以验证用户以便他们可以登录时,它返回 false(是的,用户正在输入正确的密码)。这适用于 Windows 机器,但不适用于 Ubuntu - 用户是在 Ubuntu 上创建的。有什么我忽略的吗?

while( $row = $result->fetch_object() ) {   
error_log("Before crypt");
if( crypt( $password, $row->password) == $row->password ) {
    error_log("Crypt works!" );
    return true;
} else {
    error_log("Crypt fails!");
    return false;
}
}

编辑: 我做了一些日志记录,这就是我得到的:

crypt($password) 的输出是: $6$1ySEgqi5$X9t7CZ4FXjjUReCu2VQF0klBY5kWQkb8LlIIk9oQ4RD4.W.1/IWMZW7/XaqDXIv8owWSpmLmvI.kAFGSbxELZ1

存储在 MySQL 中的哈希是:

$6$/RYC6Gax$uNhUzQPDmJy29DgUB06Ilv4Oh69D5h7NfnBSW1

它们显然不一样。怎么回事!?

【问题讨论】:

  • 您是否尝试过确保 $row->password 包含您认为的内容?尝试回显输入、数据库和输出值并手动比较它们
  • 好的,所以我已经在上面的编辑中做了一些登录 ^^^
  • 在这里您应该可以找到解决问题的方法click 编辑:阅读第一条评论(链接)
  • 第一条评论表明我已经在做什么?看我的代码
  • 确实它确实显示了您已经在做的事情,但我的意思是告诉您crypt() 确定正在使用的算法可能会导致问题。

标签: php hash passwords crypt


【解决方案1】:

我已经找到了答案,尽管我花了一段时间才意识到这一点。因此,为了其他遇到此问题的人的利益...检查在您的数据库中存储哈希的列的大小!

代码最初是在 Windows 系统上编写的,但是当我在 Linux 系统 (Ubuntu) 上运行它时,crypt() 函数使用的是 SHA-512 算法,它需要更长的列长度。我在 MySQL 和 bingo 中将列更改为 CHAR(128),它起作用了!!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 2014-03-25
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多