使用php和md5登录和注册
我正在尝试使用md5散列用户密码,但无法登录。它存储散列的密码,但当我登录时它不工作。为什么?这些是函数(在我开始使用md5之前,它是有效的)使用php和md5登录和注册,php,mysql,md5,Php,Mysql,Md5,我正在尝试使用md5散列用户密码,但无法登录。它存储散列的密码,但当我登录时它不工作。为什么?这些是函数(在我开始使用md5之前,它是有效的) 您需要像这样更正Insert查询 $query = "insert into users (username, password) values('$username' , '".md5($pass)."')"; 这是因为在注册期间,您通过SQL将密码转换为MD5,在登录期间,您通过php将密码转换为MD5 这就是它们不匹配的原因,我想并非所有服
您需要像这样更正Insert查询
$query = "insert into users (username, password) values('$username' , '".md5($pass)."')";
这是因为在注册期间,您通过SQL将密码转换为
MD5
,在登录期间,您通过php将密码转换为MD5
这就是它们不匹配的原因,我想并非所有服务器都是如此。
但有时会引起问题
因此,更好的方法是在sign\u-up
和sign\u-in
期间通过PHP
或SQL
转换密码
因为在使用php的情况下,可能需要在MD5字符串中添加一些salt值,我发现了错误
$check = $Database->checkLogin($_POST['username'], md5($_POST['password']));
然后在数据库函数中
function checkLogin($username, $password)
{
$password=md5($password);
$checkLogin = "select * from users where username='$username' AND password='$password'";
$check = mysql_query($checkLogin);
return mysql_num_rows($check) > 0 ? true : false;
}
所以我基本上是在对已经散列的密码进行散列 MD5是散列而不是加密。哦,对不起,我只知道MD5是用来存储密码的,因为它是不可逆的。那么为什么它不起作用呢?
password
的列定义是什么?这是您的问题。MD5返回一个32个字符的字符串。您真的没有将实际的DB值与哈希密码字符串进行比较,以确定其中一个更短吗?您是否注册了新用户?您是否将数据库中的哈希密码与您在checkLogin()
中获得的密码进行了比较?该密码以md5格式正确存储!问题是,当我尝试记录indo交叉检查时,数据库中存储的MD5哈希是否正确。还要检查是否有任何尾随空间。在这种情况下,您需要修剪输入数据i使用的函数checkLogin($username,$password){$password=md5($password);$checkLogin=“select*from username='$username'和password='$password'”;$check=mysql\u query($checkLogin);返回mysql\u num\u行($check)>0?true:false;}函数setRegistration($username,$password){$password=md5($password);$query=“插入用户(用户名,密码)值('$username','$password')”;“mysql_查询($query)或死(mysql_error());}
但它不起作用。您是否将MD5
字符串(在checkLogin()过程中生成)与保存在数据库表中的密码进行了比较
function checkLogin($username, $password)
{
$password=md5($password);
$checkLogin = "select * from users where username='$username' AND password='$password'";
$check = mysql_query($checkLogin);
return mysql_num_rows($check) > 0 ? true : false;
}