Php PDO登录脚本返回false

Php PDO登录脚本返回false,php,mysql,encryption,pdo,login-script,Php,Mysql,Encryption,Pdo,Login Script,我创建了一个登录脚本,我只是尝试匹配通过我的登录表单传递的用户名和密码,创建一个会话,传递会话变量,并将用户重定向到另一个页面 我使用的是面向对象的PDO风格,因为这是前进的方向,而且编写代码要简单得多 注册用户时,我使用PHP crypt方法加密密码。然而,当我尝试登录时,我的语句返回为false,公平地说,我不知道我做错了什么,也许我解密密码不正确,我不确定 当我说false的时候我指的是我的if声明echo's Invaild用户名或密码。请重试 欢迎您的任何帮助或想法,并对此表示感谢 i

我创建了一个登录脚本,我只是尝试匹配通过我的登录表单传递的用户名和密码,创建一个会话,传递会话变量,并将用户重定向到另一个页面

我使用的是面向对象的PDO风格,因为这是前进的方向,而且编写代码要简单得多

注册用户时,我使用PHP crypt方法加密密码。然而,当我尝试登录时,我的语句返回为false,公平地说,我不知道我做错了什么,也许我解密密码不正确,我不确定

当我说false的时候我指的是我的if声明echo's

Invaild用户名或密码。请重试

欢迎您的任何帮助或想法,并对此表示感谢

index.php

<form id="loginForm" method="POST" action="classes/class.Login.php">
<input type="text" id="username" name="username" placeholder="Username"/>
<input type="password" id="password" name="password" placeholder="Password" class="showpassword"/> 
<input type="submit" name="submit" value="Log in"/>

这是因为
crypt('something')
每次都返回不同的值

利用ripemd

<?php
echo hash('ripemd160', 'password');
?>

如果您存储在mysql数据库中,请尝试sha1()而不是crypt()

如@Nambi所建议,如果要使用,则需要使用可选参数Salt,否则它将返回不同的结果,这就是为什么它永远不匹配的原因

echo crypt('foo');
echo crypt('foo');
echo crypt('foo');
返回:

$1$rnmZxKr0$V7lk8JZ0tV1Utb78hH0g.0
$1$v84YR6KA$XL5QVOUBIZQWVXEIQWO/
$1$expSZHgb$HAZ9YDKMJQCMWLEDXJO41


返回:

ba4TuD1iozTxw
ba4TuD1iozTxw
ba4TuD1iozTxw


显然,如果你想要更多的控制权,最好是隐藏盐而不是简单的盐,或者让它自动生成

注册用户时,必须存储生成的盐。
在检查登录名时,您将获得salt,并将其与用户输入密码一起使用,以对其进行crypt(),然后检查使用该salt加密的密码是否与数据库中的密码匹配

注意事项:为了安全起见,这很明显,但只是以防万一:为每个密码生成不同的salt,如果您使用相同的salt,如果一个密码被黑客攻击,那么黑客将知道所有其他密码的salt,使他的生活更轻松


正如@Nabil建议的那样,你最好研究一下你将使用什么样的加密,因为以后更改它将是一件痛苦的事情

我个人喜欢河豚


避免使用MD5和SHA1,它们曾经被认为是安全的,但随着技术的发展,不再安全,甚至在php文档的相应页面上,用户也警告新用户不要使用它们。

您的查询正在执行吗?尝试打印($stmt->fetch())。还可以尝试从
$this->pdo->prepare>替换
$this
("选择你的DB手工代码<代码>密码> <代码> > $ALTU/<代码>第二个参数。DOC的状态,使用<代码> CRUPT <代码>没有它会导致一个不明确的结果-1,因为PDO与问题无关。Shan-1不考虑安全。它有FLAWSOK。谢谢。方法。谢谢你的详细回答!
echo crypt('foo');
echo crypt('foo');
echo crypt('foo');
echo crypt('foo', 'bar');
echo crypt('foo', 'bar');
echo crypt('foo', 'bar');