还原大师-遍历残缺字符串匹配md5杂凑值

news/2025/1/9 14:18:07/文章来源:https://www.cnblogs.com/Draina/p/18662065

题目:

我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,
为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。
但是我们获得它的32位MD5码也是残缺不全,E903???4DAB????08?????51?80??8A?,
请猜出神秘字符串的原本模样,并且提交这个字串的32位MD5码作为答案。

 神秘字符串所有的可能性数量并不多,直接遍历

脚本如下:(回看题目发现字符集写多了,题目说了只有大写字母的)

import hashlib
import itertools# 已知字符串和MD5部分
pattern = 'TASC?O3RJMV?WDJKX?ZM'
partial_md5 = 'E903???4DAB????08?????51?80??8A?'# 用于替代的字符集(大写字母 + 数字)
characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'# 获取所有的问号位置
question_marks_indices = [i for i, c in enumerate(pattern) if c == '?']# 暴力破解
def find_original_string():# 生成所有可能的字母和数字组合for replacement in itertools.product(characters, repeat=len(question_marks_indices)):# 将字符替换到原始字符串temp_pattern = list(pattern)for idx, char in zip(question_marks_indices, replacement):temp_pattern[idx] = chartest_string = ''.join(temp_pattern)# 计算该字符串的MD5值md5_hash = hashlib.md5(test_string.encode('utf-8')).hexdigest().upper()# 检查MD5值是否匹配match = Truefor i in range(len(partial_md5)):if partial_md5[i] != '?' and partial_md5[i] != md5_hash[i]:match = Falsebreak# 如果匹配,返回结果if match:return test_string, md5_hashreturn None, None# 运行函数
original_string, full_md5 = find_original_string()if original_string:print(f"神秘字符串: {original_string}")print(f"完整的MD5哈希: {full_md5}")
else:print("没有找到匹配的字符串。")

运行即可获得结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/866555.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

公司台式机安转后无网络

网络连接 2025年1月9日 安装台式机,没有网卡,插办工作下有四根网线,我这台在用其中一个,新电脑试了剩下的三条,都不行,今天萧师傅讲了方法,让我试一下,“线都试一下”,解决了来记录一下。先把水晶头插入电脑,看哪个电脑能识别(要等一下,正在识别也是一个球),多试…

VA35计划协议清单增强

1、需求说明 本文档在VA35计划协议清单中加入了VBEP-RRQQTY_BU和VBEP-CRQQTY_BU两个字段, 实现的效果如下:2、实现过程 2.1、调试过程 鉴于这就是个普通的查询展示报表,所以先对VA35的源代码做了断点调试,很容易就找到了要展示的表为POSTAB断点调试找到表内容发生变化的位置…

IBM Storage - 支持AI应用场景的数据存储软硬件解决方案

为了解决数据和工作负载在各地分散的现状,需要实现对存储在分布式文件和对象存储系统中的大量非结构化数据的高速访问。IBM Storage利用人工智能(AI)、机器学习(ML)和高级分析手段,对数据存储基础架构进行现代化改造。概述为了解决数据和工作负载在各地分散的现状,需要实现对…

2025年度最佳开源免费项目管理软件:8款精选工具解析【全方位大合集】

项目管理对于企业和团队的成功至关重要。无论是大型企业还是小型创业团队,都需要高效的项目管理工具来提升工作效率、优化资源分配和确保项目按时交付。今天,我们将为大家介绍8款开源免费的项目管理软件,帮助您在众多选择中找到最适合自己团队的工具。这8款工具分别是禅道、…

『玩转Streamlit』--集成定时任务

学习了Streamlit了之后,可以尝试给自己的命令行小工具加一个简单的界面。 本篇总结了我改造自己的数据采集的工具时的一些经验。 1. 概要 与常规的程序相比,数据采集任务的特点很明显,比如它一般都是I/O密集型程序,涉及大量网络请求或文件读写,耗费的时间比较长;而且往往…

VUE +WebSocket+speak-tt 实现在浏览器右下角实时给商家推送订单消息

先看效果 1、WebSocket服务建立1.1 引入包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>1.2 新建配置类package com.ruoyi.web.core.config;import org.…

ASE65R180-ASEMI超洁MOS管ASE65R180

ASE65R180-ASEMI超洁MOS管ASE65R180编辑:ll ASE65R180-ASEMI超洁MOS管ASE65R180 型号:ASE100N10 品牌:ASEMI 封装:TO-220F 批号:最新 最大漏源电流:21A 漏源击穿电压:650V RDS(ON)Max:180mΩ 引脚数量:3 芯片个数: 沟道类型:P沟道MOS管、超洁MOS管 漏电流:ua 特性…

【搜索】DFS与BFS

99. 岛屿数量讲解:https://programmercarl.com/kamacoder/0099.岛屿的数量广搜.html#思路 DFS代码 #include <iostream> #include <cstring>using namespace std;const int N = 55;int n, m; int g[N][N]; bool st[N][N]; int dx[4] = {-1, 0, 1, 0}, dy[4] = {0,…

DFS与BFS专题

99. 岛屿数量讲解:https://programmercarl.com/kamacoder/0099.岛屿的数量广搜.html#思路 DFS代码 #include <iostream> #include <cstring>using namespace std;const int N = 55;int n, m; int g[N][N]; bool st[N][N]; int dx[4] = {-1, 0, 1, 0}, dy[4] = {0,…

Spinnaker

Spinnaker 是一个持续交付平台,它定位于将产品快速且持续的部署到多种云平台上。 Spinnaker 主要特性:配置一次,随时运行;随地部署,集中化管理;开源。 Spinnaker 组件:Spinnaker 最初是以实现内部的端到端持续交付为目标,作为 Asgard 的替代,该项目期望重建一个持续交…

Java基础学习(五)

Java基础学习(五):数组 目录Java基础学习(五):数组概念声明与创建初始化基本特点内存分析应用多维数组扩展内容Arrays 类冒泡排序稀疏数组 本文为个人学习记录,内容学习自 狂神说Java概念数组是相同类型数据的有序集合 每个数据称为一个数组元素,可以通过下标来访问声明…

CDS标准视图:付款锁定原因 I_PaymentBlockingReason

视图名称:付款锁定原因 I_PaymentBlockingReason 视图类型:基础视图 视图代码:点击查看代码 //Documentation about annotations can be found at http://help.sap.com searching for CDS annotations //Inserted by VDM CDS Suite Plugin @ObjectModel.usageType.sizeCateg…