Lazy loaded image
MD5信息摘要算法
字数 3506阅读时长 9 分钟
2024-7-4
2024-7-4
type
status
date
slug
summary
tags
category
icon
password

一、简介

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。 1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

二、MD5 哈希算法流程

1、按位补充数据

在MD5算法中,首先需要对信息进行填充,这个数据按位(bit)补充,要求最终的位数对512求模的结果为448。补位至 N *512+448。即 N *64+56个字节(Bytes),N为一个正整数 言而总之,至少补1位,而最多可能补512位 。

2、扩展长度

用一个64位的数字表示数据的原始长度b,把b用两个32位数表示。那么只取b的低64位。 当遇到b大于2^64这种极少遇到的情况时,数据就被填补成长度为512位的倍数。也就是说, 此时的数据长度是16个字(32位)的整数倍数。现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。

3、初始化MD缓存器

MD5运算要用到一个128位的MD5缓存器,用来保存中间变量和最终结果。该缓存器又可看成是4个32位的寄存器A、B、C、D。初始化为:
A=0X01234567 B=0X89abcdef C=0Xfedcba98 D=0X76543210

4、处理数据段

将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。 主循环有四轮(MD4只有三轮),每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。再将所得结果向右环移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。 以一下是每次操作中用到的四个非线性函数(每轮一个)。
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)) (&是与,|是或,~是非,^是异或)

5、四轮运算

首先,应当将初始输入ABCD存起来:
第一轮: 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))
四轮运算完成后,将此时的ABCD与原始输入分别相加。
至此,一次循环就完成了,最后的输出ABCD可以作为下一次的初始输入或最终输出。

三、测试

1、test1

输入为test1,输出为:5a105e8b9d40e1329780d62ea2265d8a

2、test2

再来看看2个分组的,输入为:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
输出为:8c0b45ac70826fd5e9e128bb53ccee

四、结论

MD5作为一种检验手段被广泛应用,特别在用户密码保存方面,因其不可逆和低碰撞的特性更是大受欢迎。安卓逆向中很多时候都会用到MD5,所以了解MD5对于逆向工程师来说是非常有必要的。
 
上一篇
对称加密算法DES
下一篇
密码学简介及Base64编码

评论
Loading...