范闲通过MD5哈希算法破解庆帝与神庙信件的精彩解析

价值万元免费资料领取欢迎关注 公众号 数据分析螺丝钉

剧情背景

在这里插入图片描述

在《庆余年2》中,范闲与庆帝和神庙之间的权谋斗争愈演愈烈。但是其实早在第一季,范闲宫中在找打开箱子钥匙的时候就发现了一封秘信,这封信件可能隐藏着揭露叶轻眉的一些关键信息。但是这些信件不是明文,2fc42ad1ed54675f7ab19c7b69ed28ae,而是一串字符密文。
为了破解这些信件中的秘密,范闲研究使用后发现是128位的MD5哈希值。范闲需要找出为什么宫中会有不是这个时代的md5密信,决定对md5进行破解
在这里插入图片描述
凭借这上个时代的记忆,范闲对MD5哈希算法进行回顾

MD5 哈希算法简介

哈希算法是一种将任意长度的输入消息转换为固定长度的哈希值(摘要)的技术。哈希算法常用于数据完整性验证和密码存储。常见的哈希算法包括SHA-256、SHA-1和MD5等。

MD5 哈希算法生成原理

MD5(Message Digest Algorithm 5)是一种被广泛使用的加密哈希函数,可以产生一个128位(16字节)的哈希值。它通常用于检查数据的完整性,以防止在传输过程中被篡改。尽管MD5在现代应用中已被认为不够安全,但它仍然在某些非安全应用中被使用。

MD5 哈希算法的步骤
  1. 填充消息

    • MD5算法首先将消息填充至长度为448比特(比特长度对512取模后余数为448),即比特长度对512取模余64。这一步通过在消息末尾添加一个 ‘1’ 比特和若干 ‘0’ 比特来完成,使其长度刚好比448多64比特。
  2. 附加长度

    • 在填充后的消息后附加一个64比特的二进制数,该数表示原始消息的长度。如果消息长度超过 (2^{64}-1) 比特,则只使用最低的64比特。
  3. 初始化 MD 缓冲区

    • MD5 算法使用四个32位的寄存器来存储中间结果和最终的哈希值。这些寄存器初始化为以下常量(小端格式):
      A = 0x67452301
      B = 0xefcdab89
      C = 0x98badcfe
      D = 0x10325476
      
  4. 处理消息分组

    • 将填充后的消息划分为长度为512比特的分组。对于每个512比特的分组,进行如下处理:
      • 四轮操作:每轮操作包括16步,每步使用一个非线性函数(F、G、H、I)和模加操作。

      • 轮函数:每轮操作使用不同的轮函数和不同的偏移量。具体的操作包括:
        在这里插入图片描述

      • 合并结果:每步的结果与当前寄存器值相加,更新寄存器的值。

  5. 输出哈希值

    • 在所有消息分组处理完毕后,A、B、C、D四个寄存器的值拼接起来形成最终的128位哈希值。
      在这里插入图片描述

破解过程

他想到这可能跟 叶轻眉三个字由关,然后进行不断地测试,终于在庆帝告诉自己生日的时候他把生日正月18 带入进行破解。
在这里插入图片描述

  1. 密文
  MD5哈希值 = 2fc42ad1ed54675f7ab19c7b69ed28ae
  1. 已知哈希算法

    • 使用MD5哈希算法加密
  2. 范闲的解密步骤

    • 范闲怀疑信件内容与一些特定事件相关,例如重要的日期和人名。他将尝试生成这些内容的哈希值,并与截获的哈希值进行比较。

哈希值生成和比较

范闲使用MD5哈希算法生成一些可能的明文内容的哈希值,逐个与截获的哈希值进行比较。

Python代码示例

import hashlib# 目标哈希值
target_hash = "2fc42ad1ed54675f7ab19c7b69ed28ae"# 生成明文内容的哈希值
def generate_md5_hash(plaintext):hash_object = hashlib.md5(plaintext.encode())return hash_object.hexdigest()# 一些可能的明文内容
possible_texts = ["正月18,杀叶轻眉","正月十八,杀叶轻眉","2023年1月18日,杀叶轻眉","叶轻眉,正月18日被杀","正月18,计划开始",# 其他可能的组合...
]# 比较生成的哈希值与目标哈希值
for text in possible_texts:generated_hash = generate_md5_hash(text)if generated_hash == target_hash:print(f"明文内容: {text}")print(f"生成的哈希值: {generated_hash}")break

结果与影响

通过这种哈希值比较的方法,范闲成功地找到了与目标哈希值匹配的明文内容:

明文内容: 正月18,杀叶轻眉
生成的哈希值: 2fc42ad1ed54675f7ab19c7b69ed28ae

通过MD5哈希算法和暴力破解技术,范闲成功解密了庆帝和神庙之间的秘密信件,发现了庆帝与神庙联系的证据,想不到自己的生日也是叶轻眉的忌日,而后准备要开启复仇之路。

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

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

相关文章

基于Pytorch框架的深度学习EfficientNetV2神经网络中草药识别分类系统源码

第一步:准备数据 5种中草药数据:self.class_indict ["百合", "党参", "山魈", "枸杞", "槐花", "金银花"] ,总共有900张图片,每个文件夹单独放一种数据 第二步&a…

split拆分文件

在Linux系统中,split命令是一个非常实用的工具,用于将大文件拆分成多个小文件。以下是一些基本的使用方法: 基本用法: 使用split命令可以按照指定的行数来拆分文件。例如,将一个文件每1000行拆分成一个新文件&#xff…

Go 语言的基本构成、要素与编写规范

Go 语言,作为由 Google 开发的现代编程语言,以其简洁、高效和并发编程能力而著称。在构建高性能分布式系统和现代软件开发中,Go 语言正日益受到欢迎。本篇文章将详细探讨 Go 语言程序结构的各个要素,包括函数定义、注释规范、数据…

C语言练习题之——从简单到烧脑(11)(每日两道)

题目1:有两个矩阵a[3][2],b[2][2],元素值由键盘输入&#xff0c;计算a与b的矩阵之和&#xff08;两个矩阵循环中相加&#xff0c;结尾求和&#xff09; #include<stdio.h> int main() {int arr[3][2], brr[2][2],i,j,sum10,sum20;for (i 0; i < 3; i){for (j 0; j …

Docker搭建FRP内网穿透服务器

使用Docker搭建一个frp内网穿透 在现代网络环境中&#xff0c;由于防火墙和NAT等原因&#xff0c;内网设备无法直接被外网访问。FRP (Fast Reverse Proxy) 是一款非常流行的内网穿透工具&#xff0c;它能够帮助我们将内网服务暴露给外网。本文将介绍如何在Linux服务器上使用Do…

压测工具Jmeter的使用

一、安装 下载地址&#xff1a; 国外地址&#xff1a;jmeter.apache.org&#xff08;下载会很慢&#xff0c;建议使用国内地址&#xff09; 国内地址&#xff1a;apache-jmeter-binaries安装包下载_开源镜像站-阿里云 下载好进入bin文件下&#xff0c;双击jmeter.bat 打开…

哈希传递(PTH)

使用Mimikatz进行PTH Pass The Hash 哈希传递攻击简称 PTH&#xff0c;该方法通过找到与账户相关的密码散列&#xff08;NTLLHash&#xff09;来进 行攻击。由于在Windows系统中&#xff0c;通常会使用NTLM Hash对访问资源的用户进行身份认证&#xff0c;所以该攻 击可以在不需…

WPF WebBrowser控件解析 HTML

WPF WebBrowser控件解析 HTML Window里面的AllowsTransparency属性不要加<WebBrowser x:Name"webBrowser" />public void InitWeb() {string htmlString "<html><head><title>this is a test</title><script type text/jav…

算法学习笔记(7.2)-贪心算法(最大容量问题)

目录 ##问题描述 ##问题示例 ##释 ##贪心策略的确定 ##代码示例 ##正确性验证 ##问题描述 输入一个数组 ℎ&#x1d461; &#xff0c;其中的每个元素代表一个垂直隔板的高度。数组中的任意两个隔板&#xff0c;以及它们之间的空间可以组成一个容器。 容器的容量等于高度和宽…

泛型aaaaa

1、泛型的概述&#xff1a; 1.1 泛型的由来 根据《Java编程思想》中的描述&#xff0c;泛型出现的动机&#xff1a; 有很多原因促成了泛型的出现&#xff0c;而最引人注意的一个原因&#xff0c;就是为了创建容器类。泛型的思想很早就存在&#xff0c;如C中的模板&#xff0…

6个PPT素材模板网站,免费!

免费PPT素材模板下载&#xff0c;就上这6个网站&#xff0c;建议收藏&#xff01; 1、菜鸟图库 ppt模板免费下载|ppt背景图片 - 菜鸟图库 菜鸟图库是一个设计、办公、媒体等素材非常齐全的网站&#xff0c;站内有几百万的素材&#xff0c;其中PPT模板就有几十万个&#xff0c;…

[stm32]——定时器与PWM的LED控制

目录 一、stm32定时器 1、定时器简介 2、定时器分类 3、通用定时器介绍 二、PWM相关介绍 1、工作原理 2、PWM的一般步骤 三、定时器控制LED亮灭 1、工程创建 2、代码编写 3、实现效果 四、采用PWM模式&#xff0c;实现呼吸灯效果 1、工程创建 2、代码编写 3、实现效果 一、stm3…

STM32 IIC协议

本文代码使用 HAL 库。 文章目录 前言一、什么是IIC协议二、IIC信号三、IIC协议的通讯时序1. 写操作2. 读操作 四、上拉电阻作用总结 前言 从这篇文章开始为大家介绍一些通信协议&#xff0c;包括 UART&#xff0c;SPI&#xff0c;IIC等。 UART串口通讯协议 SPI通信协议 一、…

B端系统:角色与权限界面设计,一文读懂。

一、什么是角色与权限系统 角色与权限系统是一种用于管理和控制用户在系统中的访问和操作权限的机制。它通过将用户分配到不同的角色&#xff0c;并为每个角色分配相应的权限&#xff0c;来实现对系统资源的权限控制和管理。 在角色与权限系统中&#xff0c;通常会定义多个角色…

postgressql——四种进程间锁(4)

进程间锁 在PostgreSQL里有四种类型的进程间锁: Spinlocks:自旋锁,其保护的对象一般是数据库内部的一些数据结构,是一种轻量级的锁。 LWLocks:轻量锁,也是主要用于保护数据库内部的一些数据结构,支持独占和共享两种模式。 Regular locks:又叫heavyweight locks,也就是…

【深度揭秘GPT-4o】:全面解析新一代AI技术的突破与优势

目录 ​编辑 1.版本对比&#xff1a;从GPT-3到GPT-4&#xff0c;再到GPT-4o的飞跃 1.1 模型规模的扩展 1.2 训练数据的更新 1.3 算法优化与效率提升 1.4 案例分析 2.技术能力&#xff1a;GPT-4o的核心优势 2.1 卓越的自然语言理解 2.1.1 上下文理解能力 2.1.2 语义分…

el-table中的信息数据过长 :show-overflow-tooltip=‘true‘**

可以在 el-table-column中添加 :show-overflow-tooltip‘true’

Kotlin 2.0 重磅发布! 性能提升!新功能上线!开发者必看!

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【Java面试】六、Spring框架相关

文章目录 1、单例Bean不是线程安全的2、AOP3、Spring中事务的实现4、Spring事务失效的场景4.1 情况一&#xff1a;异常被捕获4.2 情况二&#xff1a;抛出检查异常4.3 注解加在非public方法上 5、Bean的生命周期6、Bean的循环引用7、Bean循环引用的解决&#xff1a;Spring三级缓…

软考随记(二)

I/O系统的5种不同的工作方式&#xff1a; 程序控制方式&#xff1a; 无条件查询&#xff1a;I/O端口总是准备好接受主机的输出数据&#xff0c;或是总是准备好向主机输入数据&#xff0c;而CPU在需要时随时直接利用I/O指令访问相应的I/O端口&#xff0c;实现与外设的数据交换 …