当前位置: 首页 > news >正文

MD5算法详解

哈希函数

是一种将任意输入长度转变为固定输出长度的函数。
一些常见哈希函数有:MD5、SHA1、SHA256。

MD5算法

MD5算法是一种消息摘要算法,用于消息认证。
数据存储方式:小段存储。

数据填充

首先对我们明文数据进行处理,使其比特位数模512余448,如果明文数据已经满足这个条件就再填充512比特。这里每512比特即64字节是分组长度,最后一个分组留64位用来存储初始数据长度。
这里的数据填充方式是先补一个1,后面全都补0,使得长度满足模512余448。
然后附加64位8字节的初始数据长度,这里也是小端序存储。

初始化寄存器

这里用到四个32位的寄存器,他们的内容是:
A=01234567
B=89ABCDEF
C=FEDCBA98
D=76543210
由于小端存储他们实际在内存中的值为:
A=0x67452301
B=0xEFCDAB89
C=0x98BADCFE
D=0x10325476

数据分组

把明文数据进行分组,每512比特64字节为一组,组还要进行分块,分为M1~M16的16块,每块32位4字节。

MD5Transform

接下来就进行计算了,首先根据下图介绍下计算过程中用到的相关的参数。
在这里插入图片描述
首先是图中上方四个初始化变量A、B、C、D,经过一次计算后得到下面的A、B、C、D,而从图中可以看出,只有A参与了计算结果赋值给了B,而其他的B直接赋值给了C,C直接赋值给了D,D直接赋值给了A,这样的计算在MD5中一共要经过四轮,一轮16次,共64次,每次更新一个变量,循环4次,这四个变量就都更新一次,每个变量在这个过程中更新16次。如果填充后的铭文数据只有一组512位,那么把MD5Transform得到的结果加上他们在计算前的值,然后拼接在一起,就是其MD5值。这里要注意的是内存中的数据是以小端序存储的。

MD5Transform过程分析

图中红色的田代表相加的意思,F是函数,这里不是代表一个函数,而是代表一类函数,Mi对应明文数据分块后的值,Ki对应的是一个K表,这个表里记录的是经过计算后得到的常量值。<<<s代表循环左移s位,s也是有固定的几个值。
对于A的计算可以通过一个公式来表示:B=(A+F+Mi+Ki)<<s+B。
先分析到这里,后续结合源码继续分析。

http://www.lryc.cn/news/388587.html

相关文章:

  • ES6的代理模式-Proxy
  • 排序(堆排序、快速排序、归并排序)-->深度剖析(二)
  • 七一建党节|热烈庆祝中国共产党成立103周年!
  • Spring Boot应用知识梳理
  • Spring中利用重载与静态分派
  • 文本三剑客之awk:
  • SpringSecurity-授权示例
  • 选哪个短剧系统源码好:全面评估与决策指南
  • AI时代的软件工程:挑战与改变
  • Zuul介绍
  • 7-1作业
  • ElasticSearch安装、配置详细步骤
  • 【Mybatis 与 Spring】事务相关汇总
  • Leetcode 2065. 最大化一张图中的路径价值(DFS / 最短路)
  • SeeSR: Towards Semantics-Aware Real-World Image Super-Resolution
  • 七月论文审稿GPT第5版:拿我司七月的早期paper-7方面review数据集微调LLama 3
  • 盘古5.0,靠什么去解最难的题?
  • 2.3章节Python中的数值类型
  • 每日Attention学习7——Frequency-Perception Module
  • 【从0实现React18】 (五) 初探react mount流程 完成核心递归流程
  • 0-30 VDC 稳压电源,电流控制 0.002-3 A
  • HTML5+CSS3+JS小实例:图片九宫格
  • 湘潭大学软件工程数据库总结
  • Codeforces Testing Round 1 B. Right Triangles 题解 组合数学
  • 怎样将word默认Microsoft Office,而不是WPS
  • C语言之进程的学习2
  • web使用cordova打包Andriod
  • 内卷情况下,工程师也应该了解的项目管理
  • 【解锁未来:深入了解机器学习的核心技术与实际应用】
  • 1-3.文本数据建模流程范例