使用PHP的MySQL简单加密技术

时间:2010-01-24 00:24:49

标签: php sql mysql phpmyadmin

如何在PHP中加密用户密码?

请以初学者可以理解的方式解释。我已经有了这个示例代码:

$password = "john856";
$encrypt_password = md5($password);

echo $encrypt_password;

如何将其合并到我当前的代码中,该代码不进行任何加密?

<?php
    $con = mysql_connect("localhost","root","");

    if (!$con) { die('Could not connect: ' . mysql_error()); }

    mysql_select_db("koro", $con);

    $sql="INSERT INTO users
            (LNAME, FNAME, MNAME, UNAME, PW)
          VALUES
            ('$_POST[Lneym]', '$_POST[Fneym]', '$_POST[Mneym]', '$_POST[Uneym]', '$_POST[Pass]')";

    if (!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); }

    echo "<script>alert('User added! You can now use the system.')</script>";

    mysql_close($con)
?>

5 个答案:

答案 0 :(得分:3)

让我从更重要的一点开始:

您必须永远直接将$ _POST变量传递给查询。这使您极易受到SQL injections的攻击。<​​/ p>

至少应该在您插入的每个表单值上运行mysql_real_escape_string()

$Lneym = $_POST["Lneym"];
$Lneym_halfway_safe = mysql_real_escape_string($Lneym);

....

$sql="INSERT INTO users 
          (LNAME, FNAME, MNAME, UNAME, PW)
        VALUES 
          ('$Lneym_halfway_safe', 

然后您也可以立即合并md5():

$PW = md5($_POST["PW"]);  // no escape_string() needed here, 
                          // the md5 checksum is safe

然后为密码字段插入'$PW'

最好的方法是使用像PDO这样的数据库类。其参数化查询功能可自动帮助防止SQL注入。也许this tutorial会帮助你。

看到你甚至无法将md5()添加到你的代码中(没有个人批评,我们都曾在那里开始)我强烈建议你阅读编程基础知识。复制粘贴网络平台的关键安全功能非常危险,很可能会流泪。

答案 1 :(得分:1)

你几乎就在那里。运行你的代码:

$password=$_POST["pass"];
$encrypt_password=md5($password);

然后将$ encrypt_password插入数据库中的密码字段:

$sql="INSERT INTO users 
          (LNAME, FNAME, MNAME, UNAME, PW)
        VALUES 
          ('$_POST[Lneym]', '$_POST[Fneym]', '$_POST[Mneym]', '$_POST[Uneym]', '$encrypt_password')"; 
但是,我应该补充一点,MD5是一种哈希算法,它是一个单向进程,它在每个输入上生成一个唯一的字符串(“冲突旁边”)。您将无法恢复用户的密码。这是一件好事,您仍然可以检查登录 - 只需比较md5值。

答案 2 :(得分:0)

答案 3 :(得分:0)

正如其他人所说,逃避所有变数:

$encrypt_password = mysql_real_escape_string(md5($_POST["pass"]));
$lastname = mysql_real_escape_string($_POST[Lneym]);
$firstname = mysql_real_escape_string($_POST[Fneym]);
$midname = mysql_real_escape_string($_POST[Mneym]);
$username = mysql_real_escape_string($_POST[Uneym]);
$sql = "INSERT INTO users
          (LNAME, FNAME, MNAME, UNAME, PW)
          VALUES
          ('$lastname', '$fistname', '$middlename', '$username', '$encrypt_password')";

然后登录:

$encrypt_password = mysql_real_escape_string(md5($_POST["pass"]))
$username = mysql_real_escape_string($_POST[Uneym]);
$sql = "SELECT LNAME, FNAME, MNAME, UNAME
        WHERE UNAME = '$username'
        AND PW = '$encrypt_password'";

答案 4 :(得分:-1)

据我所知,使用SHA-2MD5或甚至SHA-1更好(更安全)方式来散列您的密码。

前段时间我使用了本CMS页面教程,它的工作原理非常好。

http://hungred.com/useful-information/php-better-hashing-password/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+Hungredcom+%28Hungred.com%29

它是相当编码的,并且足够安全,因为它正在尝试组合一个私有函数来保护密码。