如何在PHP代码中对密码进行MD5加密?附现有代码求助
给注册登录系统添加MD5密码加密的修改方案
嘿,别担心,给你的代码加上MD5加密其实很容易,咱们分两步来改,先处理注册的代码,再改登录验证的部分:
1. 修改注册用的 execute.php
原来的代码里直接把明文密码存进数据库了,咱们只需要在插入的时候对密码做MD5加密就行,另外注意原来的INSERT语句最后多了个逗号,得删掉(不然会触发SQL语法错误)。修改后的代码如下:
<?php session_start(); include('db.php'); $username = $_POST['username']; $result = mysqli_query($db,"SELECT * FROM member WHERE username='$username'"); $num_rows = mysqli_num_rows($result); if ($num_rows) { header("location: register.php?remarks=failed"); } else { $date = date("Y-m-d"); $fullname = $_POST['fullname']; $username = $_POST['username']; // 对密码进行MD5加密 $password = md5($_POST['password']); // 注意去掉VALUES里最后一个多余的逗号 mysqli_query($db,"INSERT INTO member(date, fullname, username, password) VALUES('$date', '$fullname', '$username','$password')"); header("location: register.php?remarks=success"); } ?>
核心修改点:
- 把
$password=$_POST['password'];改成$password = md5($_POST['password']);,这样存进数据库的就是加密后的字符串了 - 删掉INSERT语句中
'$password'后面的多余逗号,避免SQL语法错误
2. 修改登录验证的 registercheck.php
登录的时候,需要把用户输入的密码也做MD5加密,再和数据库里存储的加密密码比对,同时还要修正代码里一个明显的逻辑错误(原来用总会员数和用户名对比,这完全不对)。修改后的代码如下:
<?php session_start(); include("db.php"); if($_SERVER["REQUEST_METHOD"] == "POST") { $username = mysqli_real_escape_string($db,$_POST['username']); // 对用户输入的密码先转义再做MD5加密 $password = md5(mysqli_real_escape_string($db,$_POST['password'])); // 先检查用户名是否存在,替换原来错误的总会员数比对逻辑 $check_user = mysqli_query($db,"SELECT * FROM member WHERE username='$username'"); if(mysqli_num_rows($check_user) == 0) { header("location: index?remark_login=failed"); exit; } // 用加密后的密码去匹配数据库中的记录 $sql = "SELECT mem_id FROM member WHERE username='$username' and password='$password'"; $result = mysqli_query($db,$sql); $row = mysqli_fetch_array($result,MYSQLI_ASSOC); $active = $row['active']; $count = mysqli_num_rows($result); if($count == 1) { $_SESSION['login_user'] = $username; header("location: profile"); } else { // 密码不匹配时也跳转到失败页面 header("location: index?remark_login=failed"); } } ?>
核心修改点:
- 把用户输入的密码先转义再MD5加密:
$password = md5(mysqli_real_escape_string($db,$_POST['password'])); - 替换了原来错误的
$c_rows!=$username逻辑,改成先检查用户名是否存在,这样登录逻辑更合理 - 增加了密码不匹配时的跳转处理,避免用户停留在空白页面
额外提醒
虽然MD5能满足基础的加密需求,但它已经属于不安全的哈希算法了(容易被彩虹表破解)。如果你的系统需要更高的安全性,建议使用PHP内置的 password_hash() 和 password_verify() 函数,它们会自动使用更安全的哈希算法(比如bcrypt),而且用法也很简单。不过如果只是为了完成当前的需求,上面的MD5修改已经可以正常工作啦。
内容的提问来源于stack exchange,提问作者Justine Noob
相关产品推荐
相关产品推荐

