题目:

我们得到了一串神秘字符串: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] = char
test_string = ''.join(temp_pattern) # 计算该字符串的MD5值
md5_hash = hashlib.md5(test_string.encode('utf-8')).hexdigest().upper() # 检查MD5值是否匹配
match = True
for i in range(len(partial_md5)):
if partial_md5[i] != '?' and partial_md5[i] != md5_hash[i]:
match = False
break # 如果匹配,返回结果
if match:
return test_string, md5_hash return None, None # 运行函数
original_string, full_md5 = find_original_string() if original_string:
print(f"神秘字符串: {original_string}")
print(f"完整的MD5哈希: {full_md5}")
else:
print("没有找到匹配的字符串。")

运行即可获得结果

还原大师-遍历残缺字符串匹配md5杂凑值的更多相关文章

  1. SM3杂凑算法Python语言实现——第三部分

    SM3杂凑算法实现--第三部分 一.SM3 密码概述        我们首先把需要用到的算法呈现出来,最后我们再考虑如何集合为一个库的方法,这一部分我们就开始编写一个新的算法:国家商用密码标准SM3密 ...

  2. 毕业设计预习:SM3密码杂凑算法基础学习

    SM3密码杂凑算法基础学习 术语与定义 1 比特串bit string 由0和1组成的二进制数字序列. 2 大端big-endian 数据在内存中的一种表示格式,规定左边为高有效位,右边为低有效位.数 ...

  3. BZOJ4259:残缺的字符串(FFT与字符串匹配)

    很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时,这两个串已经老化了,每个串都有不同程度的残缺. 你想对这两 ...

  4. Luogu P4173 残缺的字符串-FFT在字符串匹配中的应用

    P4173 残缺的字符串 FFT在字符串匹配中的应用. 能解决大概这种问题: 给定长度为\(m\)的A串,长度为\(n\)的B串.问A串在B串中的匹配数 我们设一个函数(下标从\(0\)开始) \(C ...

  5. P4173 残缺的字符串(FFT字符串匹配)

    P4173 残缺的字符串(FFT字符串匹配) P4173 解题思路: 经典套路将模式串翻转,将*设为0,设以目标串的x位置匹配结束的匹配函数为\(P(x)=\sum^{m-1}_{i=0}[A(m-1 ...

  6. BZOJ4259: 残缺的字符串(FFT 字符串匹配)

    题意 题目链接 Sol 知道FFT能做字符串匹配的话这就是个裸题了吧.. 考虑把B翻转过来,如果\(\sum_{k = 0}^M (B_{i - k} - A_k)^2 * B_{i-k}*A_k = ...

  7. 字符串匹配(hash算法)

    hash函数对大家来说不陌生吧 ? 而这次我们就用hash函数来实现字符串匹配. 首先我们会想一下二进制数. 对于任意一个二进制数,我们将它化为10进制的数的方法如下(以二进制数1101101为例): ...

  8. 字符串匹配之KMP---全力解析

    近日,一同学面试被问到字符串匹配算法,结果因为他使用了暴力法,直接就跪了(如今想想这种面试官真的是不合格的,陈皓的一篇文章说的非常好,点击阅读).字符串匹配方法大概有:BF(暴力破解法), 简化版的B ...

  9. Boyer-Moore(BM)算法,文本查找,字符串匹配问题

    KMP算法的时间复杂度是O(m + n),而Boyer-Moore算法的时间复杂度是O(n/m).文本查找中“ctrl + f”一般就是采用的BM算法. Boyer-Moore算法的关键点: 从右遍历 ...

  10. 字符串匹配KMP算法详解

    1. 引言 以前看过很多次KMP算法,一直觉得很有用,但都没有搞明白,一方面是网上很少有比较详细的通俗易懂的讲解,另一方面也怪自己没有沉下心来研究.最近在leetcode上又遇见字符串匹配的题目,以此 ...

随机推荐

  1. Typora设置自定义脚本上传图片

    搭建图床服务 这里利用CloudFlare搭建免费的图床服务 cf-image-hosting 部署Pages $ git clone https://github.com/ifyour/cf-ima ...

  2. [转]IRIG-B码授时工作原理

    在授时设备中有一种是B码授时的,但是大部分人不太清楚何为B码授时?这种类型的授时工作原理是怎么样? 首先我们要知道什么是B码,然后再介绍它的授时工作原理,B码是一种电力术语,它是IRIG-B码的通俗叫 ...

  3. Angular(一) - Typescript&Angular入门熟悉

    1. Typescript 1.1 安装typescript 1.2 typescript的小例子 1.2.1 新建一个index.ts 1.2.2 编译ts成js 1.2.3 查看生成的index. ...

  4. jdk8之stream原理及流创建、排序、转换等处理

    目录 一.为什么需要 Stream 二.什么是流 三.流的分类 1.有多种方式生成 Stream Source 2.流的操作类型 四.流的创建 1.数组和集合创建流 2.基本数值型流 3.数值流的构造 ...

  5. MySQL的7种JOIN

    原文链接:https://blog.liuzijian.com/post/61e35b3c-fae7-4e0b-aaa2-1d1f2896d9b1.html -- 创建数据库 CREATE DATAB ...

  6. 1.某道翻译js逆向sign值

    首先找到这个请求接口 这个接口就是我们请求翻译的接口 发现有个sign值,这就是我们需要逆向的值 再看看这个接口的响应 可以发现这个响应是被加密的,我们还需要去逆向解密这个被加密的响应,这篇就单纯讲一 ...

  7. 支持S3协议的S3cmd工具简单使用

    本文分享自天翼云开发者社区<支持S3协议的S3cmd工具简单使用>,作者:付****健 一:安装方法 #wget http://nchc.dl.sourceforge.net/projec ...

  8. 解决Git报“OpenSSL SSL_read: Connection was reset, errno 10054”错的问题

    1.问题描述 有时候当我们使用Git获取资源,会报"OpenSSL SSL_read: Connection was reset, errno 10054"的错误,出现该错误是因为 ...

  9. IDEA新建多模块maven项目

    1.new =>projetc=>maven=>,新建完成后删除src目录     2.增加java模块 例:robots2-common 项目根目录就是[robots2-paren ...

  10. 深入浅出 Vue3:组件与模板基础全解析

    一.Vue3 组件结构详解 1.1 单文件组件(SFC)架构 Vue3采用.vue单文件组件模式,一个典型组件包含三个区块: <template> <!-- 组件的HTML模板 -- ...