搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
小丑西瓜9
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
A star前置算法优先队列
2
Python零基础从小白打怪升级中~~~~~~~FastAPI和SQLAlchemy的整合_sqlalchemy与pydantic结合教程
3
矿山无人驾驶运输系统关键技术和未来展望
4
字节跳动五面都过了,意外被刷了下来,问了hr原因竟说是。。_字节跳动hr面试有挂的吗
5
WebStorm 与 VSCode 对比分析_webstorm和vscode
6
【Python系列】Python 解释器的站点配置_预定义模块
7
摸鱼日记一:基于PYNQ的XADC使用——用于测量内部电压及温度
8
python之pip【无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请确保路径正确,然后再试一次。】_pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查
9
基于STM32F030、MAX30102血氧心率监测仪的设计(一)_stm32f030电路设计
10
CrossOver软件2024免费苹果电脑Mac虚拟机工具_苹果电脑运行windows软件的插件
当前位置:
article
> 正文
MD5算法_md5算法流程
作者:小丑西瓜9 | 2024-04-30 22:33:35
赞
踩
md5算法流程
MD5
算法:
在网络传输中,为了保证传输信息的安全,通常会有信息摘要,信息摘要通常是通过一些算法来生成的,MD5算法就是其中一种。要了解MD5算法,我们需要从了解信息摘要的意义开始。
信息摘要:
在网络数据安全传输中,信息摘要可以防止信息被篡改,例如:微信,支付宝,QQ的支付,信息被篡改的后果可想而知,因此,会有信息摘要确保传过来的数据是原始数据,没有被更改过。
信息摘要会根据明文内容和某种特定的规则生成一段哈希值,即是明文改动一点点,生成的信息摘要结果也会不同,MD5算法就是信息摘要的实现,他可以将任意程度的明文信息生成128位的哈希值。
MD5算法使用:
MD5生成步骤:
MD5算法生成哈希值分为3步:
1:获取明文参数,2:按照指定规则,用明文参数和给定的密钥拼接起来,3:利用MD5算法生成哈希值。
需要将明文参数和密钥拼接起来是因为,如果只是将明文参数凭借起来,其他人很可能破解拼接方法,直接用明文参数自己拼接,人后利用MD5算法生成哈希值,就变得不安全了,如果用于MD5生成哈希值的内容里面拼接了密钥信息,就更加安全了。
MD5解析步骤:
MD5解析同样分为3步:
1:获取明文参数,2:按照指定规则,用明文参数和给定的密钥拼接起来,3:利用MD5算法生成哈希值,与传递过来的比较,相同说明信息正确,否则,信息就被篡改过。
这个过程称为
验签
。
MD5算法底层原理:
MD5算法的处理可以概括为4步:
第一步:处理原文
首先,获取原文的长度,长度对512取余,如果结果不等于448,那么就需要填充原文,使长度对512取余等于448,填充方法为第一位填充1,其余位填充0,填充完后,信息的长度就是512*N+448,
之后,用64位长度记录原文的真正长度,把长度的二进制之补在最后,这样处理后,得到的信息长度就是512*(N+1)。
举例
:我们对信息“0123456789abcdef”的字符串处理原文:
1:原文信息长度为16*8 = 128bit,对512取余128%512=128,不等于448,因此,需要在后面填充。
第一次填充:
其结果为 0x30,0x31,......,0x39,0x61,0x62,......,0x66,0x80,0x00......0x00。其中前面部分为原文“0123456789abcdef”,后面紧跟的0x80及二进制:10000000B,第一位填充的1,后面的前部填充0,需要填充的位数为
448-128=320,
因此,0x80后面跟了
320 / 8 - 1 = 39
个0x00,总共为
16 + 1 + 39 = 56byte,
即56 * 8 = 448位。此时满足条件。
第二次填充:
第二次填充位数为64,即8byte,原文长度为128,即0x80,因此填充的8位为:0x80,0x00,......,0x00,0x00,共7个0x00。这里采用的小端模式。
最后,我们将这512bit放在32位的数组中,采用小端的模式。
第二步:设置初始值
MD5的哈希值为128位,按每32位一组,分为4组,可以认为是4个32bit,这四组结果是由4个初始值A,B,C,D经过不断地演变得到的,初始值可以任定,MD5的官方实现中,A,B,C,D的初始值如下:
A:0x01234567
B:0x89ABCDEF
C:0xFEDCBA98
D:0x76543210
第三步:循环加工
这一步非常复杂,每一次循环都会产生新的A,B,C,D,一共处理多少次循环由原文长度决定,例如,原文长度为16,那么主循环次数为16 % 512 = 16次,每个主循环中包含了512 / 32 * 4 = 64次子循环,对于每一次子循环:
其中,上图中的符号意义如下:
1:绿色F:
图中绿色F代表一个非线性函数,官方MD5用到的函数有下面四种:
F(X, Y, Z) = ( X & Y ) | ( ( ~ X ) & Z )
G(X, Y, Z) = ( X & Z) | ( Y & ( ~Z ) )
H(X, Y, Z) = X ^ Y ^ Z (异或)
I(X, Y, Z) = Y ^ ( X | ( ~Z ) )
在一次主循环中的64次子循环,F,G,H,I,四种交替使用,64次分为4个16次,第一个16次使用F,第二个16次使用G……。
2:红色“田”字
红色的“田”就代表相加,即A加上F得到的结果。
3:Mi
Mi是第一步中得到的原文,他的长度是512*(N+1),把原文的每512位分成16等分,即(N+1)*16个32位的数据,每个512位分成的16个32位命名位M0~M15,在64次子循环中,每16次循环,都会交替使用M0~M15之一。
4:Ki
Ki是一个常量,在每个64次子循环中,每次用到的常量都是不同的。Ki是随意定的。
5:<<<s
左移s位,s是随意定的。
实际流水线工作起来的数据是这样的:
A = 原D
B = b + ( (a + F( b, c, d ) +Mi + Ki ) <<<s )
C = 原B
D = 原C
第四步:拼接结果
将最终得到的A,B,C,D四个拼接在一起,转化成字符串就得到最后的结果
声明:
本文创作参考微信公众号“程序员小灰”——什么是MD5算法
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/小丑西瓜9/article/detail/515625
推荐阅读
article
dataset
summary_
cwe606
...
文章目录vuldeepeckerdraperSySeVRvuldeepecker——comparative studyv...
赞
踩
article
MD5
算法
的
实现
、
安全性
和优化_
md5
的
实现
密码学
...
MD5
算法
是一种常见的摘要
算法
,用于将任意长度的消息转换为一个固定长度的哈希值。该
算法
由美国麻省理工学院的Ronald ...
赞
踩
article
Linux
系统编程
--
信号
与
管道
...
open 函数在打开
管道
文件的时候,必须两方都执行 open,open 才能打开,只有一个进程执行 open,open ...
赞
踩
article
交易系统
中
支付
流程
该如何做?_自己做出来
的
交易系统
怎么实现
付款
...
前言我以前在企业
中
做过
交易系统
,踩了很多坑。前几天在现在
的
公司
中
,做
付款
的
同学犯错了。
付款
给客户
的
时候产生了双重扣费。多...
赞
踩
article
在64位Win7中使用
Navicat
Premium
和PL\SQL
Developer
连接
Orac...
最近接手了一个项目,服务器端
数据库
是oracle 11g 64位。由于主要工作不是开发,也不想在自己的电脑上安装庞大的o...
赞
踩
article
数据结构
循环
队列
的实现_已知
循环
队列
的结构定义如下:
typedef
struct
{
int
si...
循环
队列
的实现代码如下:#include<iostream>using namespace std;//使用...
赞
踩
article
c++
算法:
高级
数据结构
_
高级
数据结构
:
c++
版...
c++
算法:
高级
数据结构
优先级队列 priority
_
queue451. Sort Characters By Fre...
赞
踩
article
Flutter
开发(6)
静态
资源引用,
android
打包_
fluter
如何
使用
静态
资...
1.
静态
资源文件添加和
使用
如下图:1. 工程目录下加入文件夹和文件2. pubspec.yaml 文件中对应位置添加配置...
赞
踩
article
求
单链
表
最大
值 (6 分)_输出以
h
为头
指针
的
单链
表
中
最大
节点值...
本题要求实现一个函数,返回带头结点
的
单链
表
中
最大
元素
的
地址。函数接口定义:LinkList MaxP( LinkList...
赞
踩
article
Sunny
-
Ngrok
实现
内网穿透(
免费
域名)
flask
实现
...
在
Sunny
-
Ngrok
平台:注册---->登陆---->认证---->开通隧道---->选择
免费
的---->管理隧道...
赞
踩
article
HTTP
与
HTTP
S:
网络通信
的
安全卫士
...
HTTP
和
HTTP
S作为
网络通信
的两大协议,各有其特点和应用场景。在信息安全日益受到关注的今天,采用
HTTP
S成为保障用...
赞
踩
article
破解
idea
202
4
年(基于
脚本
破解
)最新版
破解
教程 附下载链接_
idea
2023.3.
4
破译脚...
激活成功后,补丁文件夹不要删除/移动执行
脚本
后会添加环境变量,变量值对应了你放置补丁位置的路径,删除或移动,再打开 ID...
赞
踩
article
[课业] | 软件
安全
| 使用
Find
Security
Bugs
工具
静态
分析
WebGoat
...
使用
Find
Security
Bugs
工具
静态
分析
WebGoat
。_find security bugsfind se...
赞
踩
article
python
头歌
-
python
第六章
作业_
列表
的
属性
与方法
头歌
平台
第六章
答案...
【代码】
python
头歌
-
python
第六章
作业。_
列表
的
属性
与方法
头歌
平台
第六章
答案
列表
的
属性
与方法
头歌
平台
第六章
答案...
赞
踩
article
数据结构
集合...
《
数据结构
》题 目:排序及其可视化+管道铺设施工最优方案目录1 排序算法... 31.1 题目要求... 31.2 算法...
赞
踩
article
收藏!
100
条
经典
实用的
Python
实
例
,
代码
清晰拿来即用!_
python
练手
经典
100
例
...
在使用列表的时候,有时会需要取最后一个元素,有下面几种方式可以实现。_
python
练手
经典
100
例
python
练手
经典
1...
赞
踩
article
无法
保存
网页
的几种
解决方案
_
csdn
页面不能
保存
...
无法
保存
网页
的几种
解决方案
我们在网上看到一些精美有趣或是知识性的
网页
,想把它
保存
到自己的电脑上以便今后浏览,但是当我...
赞
踩
article
软考
中级
软件
设计师
个人总结 (
程序语言
部分)_
程序员
软考
中级
资料...
软考
软件
设计师
个人总结 (
程序语言
部分)本部分已完结_
程序员
软考
中级
资料
程序员
软考
中级
资料 (...
赞
踩
article
Uni
-
App
开发
框架
介绍_
uniapp
框架
介绍...
调研了
Uni
-
App
开发
框架
,核心是了解将
Uni
-app的小程序嵌入到已有Android/iOS项目中的结果。_unia...
赞
踩
article
Python
字典
初始化
三种
方式_
python
用
三种
方法
初始化
字典
{“
a
”
:
1
,
"
b
"
:
2}
,
并设置...
Python
字典
初始化
三种
方式In [
1
]
:
from collections import def
a
ultdictIn...
赞
踩
相关标签
数据结构
安全
算法
java
linux
c语言
学习
交易系统
付款
双重扣费
数据库
循环队列
人邮
flutter
链表
flask
python
后端
http
https
网络协议
intellij-idea
ide