0

我对加密和密码等很陌生,而且我这里有一些可疑的代码似乎失败了。我创建了一个新用户并将他们的密码插入到 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

他们显然不一样。这是怎么回事!?

4

1 回答 1

0

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

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

于 2013-07-31T19:59:42.647 回答