PHP crypt()总是失败吗?

PHP crypt()总是失败吗?,php,hash,passwords,crypt,Php,Hash,Passwords,Crypt,我对加密和密码等都很陌生,我这里有一些可疑的代码似乎失败了。我创建了一个新用户,并将其密码插入mysql。插入的密码是的输出 crypt( $user_input ); 当我检索行并运行以下代码验证用户以便他们可以登录时,它返回false(是的,用户输入了正确的密码)。这在Windows机器上运行,但在Ubuntu上不起作用-用户是在Ubuntu上创建的。有什么是我忽略的吗 while( $row = $result->fetch_object() ) { error_log("B

我对加密和密码等都很陌生,我这里有一些可疑的代码似乎失败了。我创建了一个新用户,并将其密码插入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$X9T7CZ4FXJJURECU2VQF0KLBY5KWQKB8LLIIIK9OQ4RD4.W.1/IWMZW7/XaqDXIv8owWSpmLmvI.kAFGSbxELZ1

MySQL中存储的哈希为:

$6$/RYC6Gax$uNhUzQPDmJy29DgUB06Ilv4Oh69D5h7NfnBSW1


他们显然不一样。发生什么事了

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


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

您是否尝试过确保$row->password包含您认为的功能?尝试回显输入、db和输出值并手动比较它们,这样我在上面的编辑中做了一些记录^^^^这里您应该找到问题的解决方案编辑:阅读第一条注释(链接)第一条注释表明我已经在做什么?看看我的代码确实它显示了一些您已经在做的事情,但我想告诉您的是,
crypt()
决定了正在使用的算法可能会导致麻烦。