php - 登录时salt和md5加密的问题

标签 php html md5 salt

<分区>

我已经设法创建了一个基本的加密系统,因此当用户最初注册我的网站时,密码会使用 salt、md5 和 sha1 安全地存储在我的数据库中。

现在问题出现在用户登录时,发送到数据库的字符串(密码)不同,即使我使用相同的方法。我将在下面演示:

这是我使用 salt 技术将客户添加到数据库页面的基本(目前)。

require "dbconn.php";

$username = $_GET['username'];
$email = $_GET['email'];
$pass = $_GET['pwd1'];
$pass2 =$_GET['pwd2'];
$matching = 0;

if($pass == $pass2)
{
echo "<script type='text/javascript'> window.alert('Your details have been successfully          registered, please proceed to login with your new credentials!')</script>";
echo '<script>javascript:window.close();</script>';

$salt = sha1(md5($pass));
$pass = md5($pass.$salt);

$query = "INSERT INTO customer VALUES    ('".$username."','".$email."','".$pass."','face1.jpg')";   

再次,这是我的基本(目前)登录页面,再次使用相同的加盐技术(我省略了此页面的后半部分)

session_start();
require "dbconn.php";

$username = $_GET['username'];
$password = $_GET['password'];

$salt = sha1(md5($password));
$password = md5($password.$salt);

$sql = "SELECT * FROM customer WHERE username ='".$username."' AND   password='".$password."'";

我做了一些检查,并在将密码输入数据库时 例如使用密码名称test:它存储为34364c859afb02e70306c905374ac2但是当用户登录时密码是:34364c859afb02e70306c905374ac2d5

最佳答案

这里有很多错误:

  1. 不要在 URL 字符串(GET 参数)中传输密码,因为这会使它可见并可能通过引用 URL 泄露密码。
  2. 使用准备好的语句。不要使用旧的 mysql_* 函数。而是使用 MySQLi 或 PDO。您发送到数据库中的任何参数都应该通过一个准备好的语句,其中两个语句之一在语句准备好后注入(inject)参数。这允许您使用 MySQL 驱动程序来转义您的参数并保护您免受 SQL 注入(inject)。
  3. 从风格上讲,您应该为变量使用一致的名称。
  4. 检查您的列长度。它可能太短了。 (缺少 2 个字符)
  5. 您的加盐方法并不真正符合加盐方法的条件,因为它是从原始密码字符串派生的。考虑为每个用户生成一个独特的盐。

关于php - 登录时salt和md5加密的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15527602/

相关文章:

java - 如何重定向到 WEB-INF 文件夹内的 JSP

html - 使用 css 创建水平跨越但按钮保持单词大小的按钮

c# - MD5 不存在于 System.Security.Cryptography 命名空间中

php - Symfony2 查询生成器添加自定义顺序查询

PHP:关键字搜索:在字符串中查找子字符串

php - 数据库连接phpmyadmin

cryptography - 使用 md5 或 sha1 仍然有效的密码散列吗?

PHP 日期格式

html - 无法弄清楚为什么我的 CSS 不会显示在我的 Chrome 浏览器中

security - MD5 是否不如 SHA 等安全?阿尔。在实际意义上?