首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >自建MD5解密平台

自建MD5解密平台

原创
作者头像
C4rpeDime
发布于 2024-12-22 07:50:01
发布于 2024-12-22 07:50:01
2690
举报
文章被收录于专栏:HackTipsHackTips

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

环境准备

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

代码详解

数据库连接

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

前端界面

代码语言:html
AI代码解释
复制
<!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>
微信图片_20241222151542.png
微信图片_20241222151542.png
  • 自动刷新:页面每秒刷新一次,以便持续生成记录。
  • Bootstrap样式:使用Bootstrap框架美化界面。

查询功能实现

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

查询逻辑

代码语言:php
AI代码解释
复制
$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注入。
  • 显示结果:根据查询结果显示原文或提示未找到。

前端界面

代码语言:html
AI代码解释
复制
<!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>
微信图片_20241222151533.png
微信图片_20241222151533.png
  • 输入框和按钮:用户可以输入MD5哈希值并提交查询。
  • 记录计数:通过AJAX定期更新数据库中的记录总数。

总结

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

微信图片_20241222151803.png
微信图片_20241222151803.png

x-github url="https://github.com/C4rpeDime/MD5"/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
自建MD5解密平台-续
在信息安全领域,**彩虹表(Rainbow Table)**是一种通过预计算哈希值和对应原始值的方式来破解密码的工具。为了实现一个简单高效的 MD5 彩虹表生成器,我使用了 PHP 和 MySQL,本文将详细介绍整个实现过程,并深入探讨如何解决开发中遇到的问题。
C4rpeDime
2024/12/23
2360
新手小白都能搭建的留言系统
今天给大家带来的教程是使用PHP和Bootstrap构建响应式布局,搭建一个简单的留言系统。
半夜喝可乐
2024/09/05
2200
新手小白都能搭建的留言系统
CISCN2019 华北赛区 Day1 Web1 Dropbox
可以看到File的close()方法会去调用file_get_contents,可能存在文件读取。User类中存在close方法,并且该方法在对象销毁时执行。同时FileList类中存在call魔术方法,并且类没有close方法。如果一个Filelist对象调用了close()方法,根据call方法的代码可以知道,文件的close方法会被执行,就可能拿到flag。
鸿鹄实验室
2021/04/15
1.7K0
CISCN2019 华北赛区 Day1 Web1 Dropbox
ciscn2019华北赛区dropbox题解
上传页面限制了只能上传图片,这里可以通过修改content-type进行绕过,但是文件后缀还是会被改成图片后缀。
KevinBruce
2020/04/25
8320
RSS状态监控自动清理设计与实现
本文档介绍了一个用于监控 RSS URL 状态并自动清理无效链接的 Demo。该 Demo 通过前后端协作,实时检查数据库中存储的 RSS URL 是否有效,并在发现失效链接时进行自动清理。Demo 的功能包括分页展示、异步状态检查和自动删除失效 URL。
C4rpeDime
2024/10/17
2220
MySQL预处理语句
即时语句,顾名思义,一条SQL语句直接是走流程处理,一次编译,单次运行,此类普通语句被称作Immediate Statements(即时语句)。
Andromeda
2022/10/27
1.9K0
MySQL预处理语句
PHP连接MySQL的几种方式及推荐
https://www.runoob.com/php/php-mysql-intro.html
码客说
2023/07/11
1K0
PHP连接MySQL的几种方式及推荐
基于PHP的网上书店设计与实现:CodeBuddy助力电子商务开发
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴
Lethehong
2025/05/19
2140
基于PHP的网上书店设计与实现:CodeBuddy助力电子商务开发
浅谈php安全
这段时间一直在写一个整站,前几天才基本完成了,所以抽个时间写了一篇对于php安全的总结。 技术含量不高,过不了也没关系,希望能一些准备写网站的朋友一点引导。 在放假之初,我抽时间看了《白帽子讲web安全》,吴翰清基本上把web安全中所有能够遇到的问题、解决思路归纳总结得很清晰,也是我这一次整体代码安全性的基石。 我希望能分如下几个方面来分享自己的经验 把握整站的结构,避免泄露站点敏感目录 在写代码之初,我也是像很多老源码一样,在根目录下放上index.php、register.php、login.
FB客服
2018/02/02
2K0
ciscn2019华北赛区半决赛day1_web1题解
感谢buuoj的大佬们搭建的复现环境。作为一位CTF的初学者,我会把每个题目的writeup都写的尽量详细,希望能帮到后面的初学者。
KevinBruce
2020/03/12
1.1K0
CodeBuddy:社区交流网络开发的革命性助手
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴
Lethehong
2025/05/19
1850
CodeBuddy:社区交流网络开发的革命性助手
当歌 - RSS 订阅分发平台技术文档
当歌是一个极简的 RSS 订阅分发平台,旨在为用户提供便捷的 RSS 管理和订阅服务,帮助用户轻松获取和分享最新资讯。
C4rpeDime
2025/01/08
2860
Ajax+PHP实现点击加载更多无刷新加载下一页
先添加按钮: <a id="load-more-button" type="button">MORE</a> 然后在JS中定义初始页和每页显示数量并进行Ajax请求: var currentPage = 1; var perPage = 4; function loadMore() { $.ajax({ //请求方式 type: 'get',
岳泽以
2023/04/27
1.1K0
我用ChatGPT做开发之小轻世界聊天系统
你真的不得不佩服ChatGPT的能力,这段时间确实爱不释手,自己也做了很多有趣的小工具,比如骗子QQ公示、小轻一言、音乐播放器、资源库、知乎热榜、新闻热门等页面。
半夜喝可乐
2023/06/12
9310
我用ChatGPT做开发之小轻世界聊天系统
用豆包制作一个可以统计直播数据的系统
最近公司直播使用的是微赞平台做私域直播,我们为了方便直播数据的累计,保证能够提升单个直播间的数据,所以采用的是数据全累计,这样会导致一个问题就是无法获取单场数据,经平台确认,暂时无法统计这方面的数据,但是我们每天都要汇报这方面的数据,所以我做了这个系统。
半夜喝可乐
2024/12/11
2020
用豆包制作一个可以统计直播数据的系统
新手小白都能搭建的留言系统
今天给大家带来的教程是使用PHP和Bootstrap构建响应式布局,搭建一个简单的留言系统。 这个留言系统是早期博客给我的灵感,所以对于这个系统来说,并没有什么创新,但是对于新手小白来说可以借鉴一二。
半夜喝可乐
2024/09/30
2990
新手小白都能搭建的留言系统
如何使用 MD5 和 SQL 实现服务器授权?
目前有一个 SQL 数据库,其中存储着以 MD5 形式加密的密码。服务器需要生成一个唯一密钥,然后将其发送给客户端。在客户端,它将使用该密钥作为盐值,然后将密码与盐值一起散列,并将其发回服务器。
用户11021319
2024/03/21
1960
如何使用 MD5 和 SQL 实现服务器授权?
大数据导出时的性能问题
在处理大数据导出时,直接一次性从数据库中读取所有数据并导出可能会导致内存溢出或性能问题。为了解决这些问题,常用的解决方案包括分批次处理、流式输出和使用临时文件等。以下是几种常见的解决方案及其PHP代码示例:
JDK7.0
2025/03/13
2610
看世界论坛系统密码修改逻辑分享
在网站设计中,我们避免不了对账户的管理,本篇重点介绍我的项目“看世界”网页对账户密码修改的逻辑处理!
半夜喝可乐
2023/11/06
4200
看世界论坛系统密码修改逻辑分享
2024全网最全面及最新且最为详细的网络安全技巧 九之文件包含漏洞典例分析POC;EXP以及 如何防御和修复[含PHP;Pyhton,C源码和CTF精题及WP详解](4)
这里我们可以介绍第一个trick,即利用phpinfo会打印上传缓存文件路径的特性,进行缓存文件包含达到getshell的目的。
盛透侧视攻城狮
2024/10/21
2870
2024全网最全面及最新且最为详细的网络安全技巧 九之文件包含漏洞典例分析POC;EXP以及 如何防御和修复[含PHP;Pyhton,C源码和CTF精题及WP详解](4)
推荐阅读
相关推荐
自建MD5解密平台-续
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档