【问题标题】:How do I encrypt this password with MD5 using PHP?如何使用 PHP 使用 MD5 加密此密码?
【发布时间】:2012-09-21 21:14:49
【问题描述】:

下面的代码来自一个登录脚本,用 PHP 编写。它检查密码的数据库使用 MD5 加密密码,但是当登录脚本检查数据库的密码时,它正在检查未加密的原始密码。我熟悉 md5() 函数,但如何将其合并到以下内容中:

<?php
session_start();

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

if ($username && $password) {
    $connect = mysql_connect("host", "user", "password") or die("Couldn't connect");
    mysql_select_db("dbname") or die("Couldn't find the database");

    $query = mysql_query("SELECT * FROM users WHERE username='$username'");
    $numrows = mysql_num_rows($query);

    if ($numrows != 0) {
        while ($row = mysql_fetch_assoc($query)) {
            $dbusername = $row['username'];
            $dbpassword = $row['password'];
        }

        if ($username == $dbusername && $password == $dbpassword) {
            echo "You're in! Click <a href='../member.php'>here</a> to enter the member page.";
            $_SESSION['username'] = $username;
        }else{
            echo "Incorrect password";
        }
    }else{
        die("That username does not exist.");
    }
}else{
    die("Please enter a valid username and password.");
}
?>

【问题讨论】:

  • $password == $dbpassword 更改为 md5($password) == $dbpassword 应该可以。
  • 您的代码容易受到著名的 SQL 注入攻击。
  • 仍在研究 mysql_escape_real_string() 的东西
  • MD5 是 nowhere near good enough 用于此目的。
  • 在接触 mysql_escape_real_string 之前,使用 mysli 或 PDO 代替准备好的语句。现在真的不需要继续学习mysql_*了。

标签: php mysql encryption login md5


【解决方案1】:

您应该检查和查询数据库中的匹配项,而不是将结果下载下来并在本地检查它们。话虽如此:

$password = md5($_POST['password']);

然后也改变:

SELECT * FROM users WHERE username='$username' AND password='$password'

但我也想看看使用PDO 而不是将值直接放在 SQL 查询中。至少你应该使用mysql_real_escape_string 来避免注入攻击。

【讨论】:

  • 我还建议不要使用 MD5,因为它几乎没有给您任何安全性。 bcrypt 或 PBKDF2
  • @ExplosionPills 对,或者使用盐。但更好的是加盐更浓的东西。
【解决方案2】:
    $salt=sha1($postpassword);
    $arr= strlen($postpassword);
    $count=ceil($arr/2);
    $stringarr=str_split($postpassword,$count);
    $password1=hash("sha512", $stringarr['0']); 

    $password2=$salt . ( hash( 'whirlpool', $salt . $stringarr['1'] ) );
    return $password1.$password2;

【讨论】:

猜你喜欢
  • 2023-03-30
  • 2015-06-12
  • 1970-01-01
  • 2015-01-13
  • 2014-06-25
  • 2010-12-02
  • 2018-03-28
  • 2014-08-01
  • 2011-05-24
相关资源
最近更新 更多