自建MD5解密平台

news/2024/12/23 8:31:31/

在这篇文档中,我将详细介绍如何开发一款MD5解密平台。这个平台的核心功能是生成和查询MD5彩虹表。以下是对index.phpchaxun.php文件的详细拆解和说明。

环境准备

确保开发环境的搭建,包括:

  • PHP 7.x或更高版本
  • MySQL 5.x或更高版本
  • Apache或Nginx服务器

代码详解

数据库连接

php">$servername = "localhost";
$username = "md5";
$password = "123456";
$dbname = "md5";
$tableName = "rainbow_table";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
  • 数据库参数:定义数据库连接所需的参数。
  • 创建连接:使用mysqli创建与数据库的连接。
  • 检查连接:如果连接失败,输出错误信息并终止脚本。

创建数据表

php">$tableExists = $conn->query("SHOW TABLES LIKE '$tableName'")->num_rows > 0;
if (!$tableExists) {
$createTableSql = "CREATE TABLE $tableName (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
hash VARCHAR(32) NOT NULL,
original VARCHAR(255) NOT NULL,
UNIQUE KEY unique_hash (hash)
)";
if ($conn->query($createTableSql) === TRUE) {
echo "表 $tableName 创建成功<br>";
} else {
die("创建表错误: " . $conn->error);
}
}
  • 检查表是否存在:使用SHOW TABLES查询表是否已存在。
  • 创建表:如果表不存在,创建一个新的表rainbow_table
    • 字段定义
      • id:自增主键。
      • hash:存储MD5哈希值。
      • original:存储原文。
    • 唯一约束:确保hash字段的唯一性。

生成彩虹表

php">function generateRainbowTable($charset, $batchSize, $conn, $tableName) {
$charsetLength = strlen($charset);
$count = 0;
$maxLength = 8;
for ($length = 1; $length <= $maxLength; $length++) {
if ($count >= $batchSize) break;
$count += generateCombinations($charset, '', $length, $charsetLength, $conn, $batchSize - $count, $tableName);
}
echo "生成了 $count 条记录\n";
}
  • 字符集:定义用于生成组合的字符集。
  • 递归生成:通过递归生成所有可能的字符串组合。
  • 批量生成:限制每次生成的记录数量。

生成组合

php">function generateCombinations($charset, $currentString, $maxLength, $charsetLength, $conn, $remaining, $tableName) {
if (strlen($currentString) == $maxLength) {
if ($remaining <= 0) return 0;
$hash = md5($currentString);
$stmt = $conn->prepare("INSERT IGNORE INTO $tableName (hash, original) VALUES (?, ?)");
$stmt->bind_param("ss", $hash, $currentString);
$stmt->execute();
return 1;
}
$count = 0;
for ($i = 0; $i < $charsetLength; $i++) {
if ($count >= $remaining) break;
$count += generateCombinations($charset, $currentString . $charset[$i], $maxLength, $charsetLength, $conn, $remaining - $count, $tableName);
}
return $count;
}
  • 递归终止条件:当生成的字符串达到最大长度时,计算其MD5哈希值并插入数据库。
  • 插入数据:使用INSERT IGNORE避免重复插入。

配置和执行

php">$charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.@#?!$%^&()-=+[]{}|;:,.<>~';
$batchSize = 10000;
generateRainbowTable($charset, $batchSize, $conn, $tableName);
$conn->close();
  • 字符集和批量大小:定义生成组合的字符集和每次生成的记录数量。
  • 执行生成:调用generateRainbowTable函数生成彩虹表。
  • 关闭连接:完成后关闭数据库连接。

前端界面

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MD5 彩虹表生成器</title>
<script>
window.onload = function() {
setTimeout(function() {
location.reload();
}, 1000);
};
</script>
</head>
<body>
<div class="container mt-5">
<h1 class="text-center">MD5 彩虹表生成器</h1>
<p class="text-center">每生成1万条记录后自动刷新页面。</p>
</div>
</body>
</html>

在这里插入图片描述

  • 自动刷新:页面每秒刷新一次,以便持续生成记录。
  • Bootstrap样式:使用Bootstrap框架美化界面。

查询功能实现

chaxun.php中,我实现了MD5哈希值的查询功能。

查询逻辑

php">$searchResult = '';
$resultVisible = false;
if ($SERVER["REQUEST_METHOD"] == "POST") {
$hash = $POST['hash'];
if (strlen($hash) == 16) {
$stmt = $conn->prepare("SELECT original FROM $tableName WHERE hash LIKE CONCAT('%', ?, '%')");
} else {
$stmt = $conn->prepare("SELECT original FROM $tableName WHERE hash = ?");
}
$stmt->bind_param("s", $hash);
$stmt->execute();
$stmt->bind_result($original);
if ($stmt->fetch()) {
$searchResult = "<strong>MD5:</strong> " . htmlspecialchars($hash) . "<br><strong>原文:</strong> " . htmlspecialchars($original);
} else {
$searchResult = "未找到匹配的原文。";
}
$resultVisible = true;
$stmt->close();
}
  • 处理用户输入:根据输入的MD5长度选择查询方式。
  • 查询数据库:使用预处理语句防止SQL注入。
  • 显示结果:根据查询结果显示原文或提示未找到。

前端界面

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MD5 查询</title>
<link href="https://cdn.staticfile.net/twitter-bootstrap/4.6.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
function updateRecordCount() {
$.ajax({
url: 'get_record_count.php',
success: function(data) {
document.getElementById('recordCount').innerText = data;
}
});
}
let countdown = 60;
function updateCountdown() {
document.getElementById('countdown').innerText = countdown;
if (countdown === 0) {
updateRecordCount();
countdown = 60;
} else {
countdown--;
}
setTimeout(updateCountdown, 1000);
}
window.onload = updateCountdown;
</script>
</head>
<body>
<div class="container mt-5">
<h1 class="text-center mb-4">MD5 查询</h1>
<p class="text-center">当前数据库中有 <strong id="recordCount"><?php echo $totalRecords; ?></strong> 条记录。记录将在 <strong id="countdown">60</strong> 秒后更新。</p>
<div class="row justify-content-center">
<div class="col-md-6">
<form method="post">
<div class="input-group mb-3">
<input type="text" class="form-control" id="hash" name="hash" placeholder="请输入 MD5 哈希值" required>
<div class="input-group-append">
<button class="btn btn-primary" type="submit">查询</button>
</div>
</div>
</form>
<?php if ($resultVisible): ?>
<div class="mt-3">
<div class="alert alert-info" role="alert">
<?php echo $searchResult; ?>
</div>
</div>
<?php endif; ?>
</div>
</div>
</div>
</body>
</html>

在这里插入图片描述

  • 输入框和按钮:用户可以输入MD5哈希值并提交查询。
  • 记录计数:通过AJAX定期更新数据库中的记录总数。

总结

通过以上步骤,我成功开发了一款简单的MD5解密平台。这个平台可以生成大量的MD5哈希值及其对应的原文,并提供快速查询功能。
在这里插入图片描述

https://github.com/C4rpeDime/MD5


http://www.ppmy.cn/news/1557418.html

相关文章

2025年前端面试热门题目——HTML|CSS|Javascript|TS知识

以下是对这些 HTML 面试问题的详细解答&#xff1a; 1. HTML 的 src 和 href 属性有什么区别? src (Source) 属性&#xff1a; 用于嵌入资源&#xff0c;例如图像、脚本或 iframe。加载资源时&#xff0c;当前页面的加载会暂停&#xff0c;直到资源加载完成。常用于 <img&g…

全脐点曲面当且仅当平面或者球面的一部分

S 是全脐点曲面当且仅当 S 是平面或者球面的一部分。 S_\text{ 是全脐点曲面当且仅当 }{S_\text{ 是平面或者球面的一部分。}} S 是全脐点曲面当且仅当 ​S 是平面或者球面的一部分。​ 证&#xff1a; 充分性显然&#xff0c;下证必要性。 若 r ( u , v ) r(u,v) r(u,v)是…

iClient3D for Cesium 实现限高分析

作者&#xff1a;gaogy 1、背景 随着地理信息技术的发展&#xff0c;三维地球技术逐渐成为了许多领域中的核心工具&#xff0c;尤其是在城市规划、环境监测、航空航天以及军事领域。三维地图和场景的应用正在帮助人们更加直观地理解空间数据&#xff0c;提供更高效的决策支持。…

Windows11 家庭版安装配置 Docker

1. 安装WSL WSL 是什么&#xff1a; WSL 是一个在 Windows 上运行 Linux 环境的轻量级工具&#xff0c;它可以让用户在 Windows 系统中运行 Linux 工具和应用程序。Docker 为什么需要 WSL&#xff1a; Docker 依赖 Linux 内核功能&#xff0c;WSL 2 提供了一个高性能、轻量级的…

CMake 实战练习

本文将演示如何使用 CMake 管理一个中等复杂度的项目&#xff0c;从创建项目到编译和运行的整个过程&#xff0c;涵盖了从基本配置到高级特性的实际应用。 实战内容如下&#xff1a; 创建 CMakeLists.txt 文件&#xff1a;定义项目、库、可执行文件和测试。编写源代码和测试&…

【LeetCode: 876. 链表的中间结点 + 链表】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

3D开发工具HOOPS助力造船业加速设计与数字化转型

随着造船业对设计、高效精准建模和快速原型开发的需求不断增加&#xff0c;先进的3D技术逐渐成为推动行业创新的核心工具。Tech Soft 3D的HOOPS SDK作为行业领先的开发平台&#xff0c;已被NAPA、Herbert-ABS和三菱造船有限公司等全球造船业领导者所采用&#xff0c;帮助企业加…

华水967数据结构2012真题---选择题部分

二 、 单项选择题 1. 线性表的顺序存储结构是一种【】的存储结构。 A. 散列存取 B. 索 引 存 取 C. 随机存取 D. 顺序存取 答案&#xff1a;C 解析&#xff1a; A. 散列存取&#xff1a;顺序存储结构并不依赖于散列函数来确定元素的存储位置&#xff0c;因此A选项不正确。 B.…