首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP x==x但是if语句表示x!=x

PHP x==x但是if语句表示x!=x
EN

Stack Overflow用户
提问于 2015-05-11 02:17:21
回答 2查看 68关注 0票数 1

我有一个checklogin.php:

代码语言:javascript
复制
<?php

$host="localhost"; // Host name 
$username="user"; // Mysql username 
$password="pass"; // Mysql password 
$db_name="database1"; // Database name 
$tbl_name="users"; // Table name 
$lastLogDate=date("l, m/d/y, h:i:sa");
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT password FROM $tbl_name WHERE username='$myusername'";
$result=mysql_query($sql);
$realpassword=mysql_result($result, 0);

define("ENCRYPTION_KEY", "!@#$%^&*");
function decrypt($encrypted_string, $encryption_key) {
    $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $decrypted_string = mcrypt_decrypt(MCRYPT_BLOWFISH, $encryption_key, $encrypted_string, MCRYPT_MODE_ECB, $iv);
    return $decrypted_string;
}
$realpassword=decrypt($realpassword, ENCRYPTION_KEY);

if ($mypassword == $realpassword) {
session_register("myusername");
session_register("mypassword"); 
session_register("userid");
session_register("finalemail");
$sqldate="UPDATE userdata SET lastLog = '$lastLogDate' WHERE username = '$myusername'";
$resultdate=mysql_query($sqldate);
header("location:/home");
}
else {
echo "Wrong Username or Password<br>";

}
?>

当有人登录到login.php时,他们输入的密码与解密后数据库中的密码相同,它仍然写着“错误的用户名或密码”。我添加了一个echo来查看解密是否有效,但它正确地返回了。我开了个新账户,试着用它登录,结果成功了。在我添加加密之前,这只对帐户不起作用,我只是自己加密了密码。也许这就是问题所在?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-11 02:53:41

你的问题是双重的。

首先,mcrypt在编码前用尾随空字节来填充数据(如果您不自己应用填充,例如PKCS7);解码后需要去掉这些空字节:

代码语言:javascript
复制
$realpassword = rtrim($realpassword, "\0");

其次,您不应该对密码使用加密;相反,使用密码散列API;有关示例,请参见这个答案

票数 3
EN

Stack Overflow用户

发布于 2015-05-11 03:00:15

可能是受这些转换影响的旧密码:

代码语言:javascript
复制
$mypassword = stripslashes($mypassword);
$mypassword = mysql_real_escape_string($mypassword);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30158753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档