You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:27:20