如何使用 MD5 和 SQL 实现服务器授权?

1、问题背景

目前有一个 SQL 数据库,其中存储着以 MD5 形式加密的密码。服务器需要生成一个唯一密钥,然后将其发送给客户端。在客户端,它将使用该密钥作为盐值,然后将密码与盐值一起散列,并将其发回服务器。

唯一的问题是,SQL 数据库中已经以 MD5 形式存储了密码。因此,要使此方法可行,必须在客户端对密码进行 MD5 摘要,然后再使用盐值再次进行 MD5 摘要。这种方法似乎不妥,想进一步了解是否还有更好的解决办法。

2、解决方案

在以下两种方法中选择一种:

  1. 使用 SSL 来加密连接,然后以纯文本形式从客户端发送密码。服务器随后将进行 md5 摘要,并与数据库中的 md5 哈希值进行比较,以查看它们是否相同。如果相同,则验证成功。在客户端对密码进行 MD5 摘要没有任何意义,因为拥有 md5 密码的黑客可以像获得纯文本密码一样轻松地进入系统。
  2. 在服务器端实现 MD5 摘要。在客户端对密码进行 MD5 摘要,然后将其连同唯一密钥一起发送到服务器。服务器随后使用密钥将密码解密,并将其与数据库中的 MD5 哈希值进行比较,以查看它们是否相同。如果相同,则验证成功。这种方法的安全性更高,因为黑客即使拥有 MD5 密码也很难在没有密钥的情况下进入系统。

以下是一些代码示例,演示了如何使用 PHP 实现上述两种解决方案:

php 复制代码
// 使用 SSL 加密连接
if (isset($_POST['username']) && isset($_POST['password'])) {
  $username = $_POST['username'];
  $password = $_POST['password'];

  // 检查用户名和密码是否正确
  $sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
  $result = $conn->query($sql);

  if ($result->num_rows > 0) {
    // 用户名和密码正确,设置会话并重定向到主页
    session_start();
    $_SESSION['username'] = $username;
    header("Location: index.php");
  } else {
    // 用户名或密码错误,显示错误消息
    echo "Invalid username or password";
  }
}
php 复制代码
// 在服务器端实现 MD5 摘要
if (isset($_POST['username']) && isset($_POST['password'])) {
  $username = $_POST['username'];
  $password = $_POST['password'];

  // 从数据库中获取密钥
  $sql = "SELECT secret_key FROM secrets WHERE username = '$username'";
  $result = $conn->query($sql);

  if ($result->num_rows > 0) {
    $row = $result->fetch_assoc();
    $secret_key = $row['secret_key'];

    // 使用密钥解密密码
    $decrypted_password = decrypt($password, $secret_key);

    // 检查用户名和密码是否正确
    $sql = "SELECT * FROM users WHERE username = '$username' AND password = '$decrypted_password'";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
      // 用户名和密码正确,设置会话并重定向到主页
      session_start();
      $_SESSION['username'] = $username;
      header("Location: index.php");
    } else {
      // 用户名或密码错误,显示错误消息
      echo "Invalid username or password";
    }
  } else {
    // 用户名或密钥错误,显示错误消息
    echo "Invalid username or key";
  }
}
相关推荐
Web极客码7 分钟前
跨国网络抖动下的 AI 爬虫流调优:我如何用 Claude 打造“智能退避”资讯清洗管道
网络·人工智能·爬虫
2601_9623413012 分钟前
计算机毕业设计之jsp考研在线复习平台
java·大数据·开发语言·hadoop·python·考研·课程设计
云烟成雨TD40 分钟前
LangFlow 1.x 系列【7】工作流创建与部署指南
人工智能·python·agent
月疯1 小时前
np.where()[0]的用法
开发语言·python·numpy
KaMeidebaby1 小时前
卡梅德生物技术快报|纳米抗体技术全套实操流程:AFB1 全合成文库淘选 + 分子对接定点突变参数手册
人工智能·python·tcp/ip·算法·机器学习
hnxaoli1 小时前
统信小程序(十六)xls转xlsx
开发语言·python·小程序
梦想三三1 小时前
Flask + PyTorch模型部署实战:从训练权重到API接口完整工程解析(附完整代码)
人工智能·pytorch·python·flask·模型推理·ai 工程化
用户298698530142 小时前
Python 实现 Excel 与 TXT 文本的高效转换与导出
后端·python·excel
杨超越luckly2 小时前
Agent 应用指南:基于 OurAirports 的中国机场设施数据可视化
python·html·github·可视化·机场设施
卷无止境2 小时前
pytest 从零到实战:要想代码好,测试少不了
后端·python