使用base64_encode登录(md5($ Login。$ Pass,true));

时间:2015-02-13 03:37:47

标签: php base64 md5

我在制作登录页面时遇到了一些麻烦。我仍然是PHP编程的初学者,但是如果它获得了正确的登录和ID或正确的登录和电子邮件,我的登录系统可以工作,但它不能用于密码。

密码在注册页面上的加密方式如下:

$Salt = base64_encode(md5($Login.$Pass, true));

这是我登录系统的一部分:

$Login = StrToLower(Trim($_POST['login']));
$Password = Trim($_POST['passwd']);
$Password = "0x".md5($Login.$Password);
$sql = "select * from users where name ='".$Login."' and  passwd ='".$Password."' ";

提前致谢。

3 个答案:

答案 0 :(得分:1)

问题在于,当您存储密码时,您将其加密,如:

base64_encode(md5($Login.$Pass, true))

当您检查密码时,您说密码是加密的,如:

"0x".md5($Login.$Password);

举个例子: 我正在使用user =' user'和密码='密码'

您存储的密码如1ECu0YmhP/lw2sfn6PmHsg==,当您检查密码时,这是0xd5745f9425eceb269f9fe01d0bef06ff

测试代码:

$ php -a
php > echo base64_encode(md5('user'.'password', true));
1ECu0YmhP/lw2sfn6PmHsg==

php > echo "0x".md5('login'.'password');
0xd5745f9425eceb269f9fe01d0bef06ffphp > 

建议:

  1. 您应该清理变量阅读http://php.net/manual/en/function.mysql-real-escape-string.php
  2. mysql已被停用,请开始使用msqliPDO(推荐)阅读http://php.net/manual/en/book.pdo.php
  3. 要获得更好,更安全的密码加密,请使用password_hash 阅读http://php.net/manual/en/function.password-hash.php& http://php.net/manual/en/faq.passwords.php

答案 1 :(得分:1)

在为您的登录代码投入任何额外的精力之前,我强烈建议您花时间研究SQL注入和PHP参数化查询功能的主题。发布后,您的代码是一个登录代码的教科书示例,通过SQL注入很容易入侵。

目前,在我看来,只需在“名称”登录字段中输入以下内容即可让我每次都登录:

' or True;

我很抱歉这不是您问题的直接答案,但我还没有使用评论的声誉点。我们都必须开始在某个地方学习,但是在PHP学习过程中不能早期编写登录功能。即使经过多年的经验,很多人仍然会建议永远不要使用自己的身份验证,而是使用现有的框架(我认为是好的建议)。

答案 2 :(得分:0)

我不确定你是否得到了Lea Tano的答案。

您不需要解码base64。

你需要编码!!! :-)所以改变你的代码:

$Login = StrToLower(Trim($_POST['login']));
$Password = Trim($_POST['passwd']);
$Password = base64_encode(md5($Login.$Password, true));
$sql = "select * from users where name ='".$Login."' and  passwd ='".$Password."' ";