首页 > 编程知识 正文

md5算法的主要步骤(md5算法详解)

时间:2023-05-04 14:34:06 阅读:75902 作者:1907

本文介绍了MD5加密算法(消息摘要算法第五版) (中文名称为消息摘要算法)、MD5加密算法的基础原理以及MD5加密算法的解密算法方法

摘要哈希生成的正确姿态是什么? 分为三个步骤:

1 .收集相关业务参数。 这里是金额和目标账户。 当然,实际APP应用程序的参数肯定比这多得多。 这里只是简化了。

2 .根据规则,将参数名称和参数值连接成一个字符串,同时连接给定的密钥。 之所以需要钥匙,是因为攻击者也可能知道拼接规则。

3 .利用MD5算法根据原始文本创建哈希值。 MD5生成的哈希值是128位二进制数,即32位十六进制数。

第三方支付平台如何验证请求的签名? 同样分为三个步骤:

1 .发送方和请求方约定相同的字符串拼接规则,约定相同的密钥。

2 .第三方平台接受支付请求,根据规则将业务参数和私钥拼接在一起,使用MD5算法生成Sign。

3 .将第三方平台自行生成的Sign与请求发送过来的Sign进行比较,如果两个Sign的值一模一样,则签名没有错误,如果两个Sign的值不同,则信息被篡改。 这个过程叫做验票。

MD5 算法底层原理:

总之,MD5算法的过程可以分为四个步骤。 是原文的处理、初始值的设定、循环加工、结果的连接。

第一步:处理原文

首先,计算出原文的长度(bit )对512求馀数的结果,如果不等于448,则需要按照原文对512求馀数的结果为448的方式填充原文。 填充的方法是在第一位填充1,在剩下的位填充0。 填充后,信息长度为512*N 448。

然后,在剩下的位置(512-448=64位)记录原文的真实长度,最后填充长度的二进制值。 这样处理的消息长度是512*(n1 )。

步骤:设定初始值

MD5的散列结果长度为128比特,为按32比特分组的合计4个分组。 这4个组的结果是4个初始值a、b、c、d不断演化得到的。 在MD5的官方安装中,a、b、c、d的初始值如下(例如

A=0x01234567

B=0x89ABCDEF

C=0xFEDCBA98

D=0x76543210

步骤:循环加工

这一步是最复杂的一步。 请看下图。 此图显示了一次a、b、c、d值的推移流程。

图中,a、b、c、d是散列值的4个组。 每个周期,旧的ABCD都会产生新的ABCD。 一共循环几次? 由处理后的原文长度决定。

设处理后的原文长度为m

主循环次数=M/512

每个主循环包含512/32 * 4=64次子循环。

上图显示了单次子循环的流程。

接下来,我将介绍图中的其他元素。

1 .绿色f

图中绿色的f表示非线性函数。 公式MD5中使用的函数有4种。

f(x,y,z )=) xy )|((x ) z ) ) ) ) ) )。

g(x,y,z )=) xz )y(~z ) )

h(x,y,z )=XYZ

I(x,y,z )=y^ ) x|(~z ) )

在主循环下的64个子循环中,交替使用f、g、h、I,前16次使用f,第2个16次使用g,第3个16次使用h,第4个16次使用I。

2 .红色“田”字

很简单。 红田字表示加法的意思。

3.Mi

Mi是第一步处理的原文。 第一步,处理后的原文长度是512的整数倍。 每512位原文再分成16等份,命名为m0~M15,1等份长度为32。 在64次循环中,每16次循环交替使用M1~M16中的任意一个。

4.Ki

一个常数在64个子循环中,对于使用的每个常数都不同。

5 .黄色s

如果向左移位,s的值也是常数。

在“流水线”的末尾,将计算结果和b相加,代替原来的b。 新ABCD的产生可归纳如下。

新的A=原始的d

新b=b((af ) b、c、d ) Mj Ki ) ) ) ) ) ) ) )。

新C=原b

新的D=原始的c

主循环的64个子循环归纳起来,可以归纳为以下4个。

第一次: ff(a,b,c,d,m0,7,0x d 76 aa 478 ) s )=7,k )=0xd76aa478ff ) a,b,c,d,M1,

12,0xe8c7b756) s[1]=12, K[1] = 0xe8c7b756

FF(a,b,c,d,M2,17,0x242070db)

FF(a,b,c,d,M3,22,0xc1bdceee)

FF(a,b,c,d,M4,7,0xf57c0faf)

FF(a,b,c,d,M5,12,0x4787c62a)

FF(a,b,c,d,M6,17,0xa8304613)

FF(a,b,c,d,M7,22,0xfd469501)

FF(a,b,c,d,M8,7,0x698098d8)

FF(a,b,c,d,M9,12,0x8b44f7af)

FF(a,b,c,d,M10,17,0xffff5bb1)

FF(a,b,c,d,M11,22,0x895cd7be)

FF(a,b,c,d,M12,7,0x6b901122)

FF(a,b,c,d,M13,12,0xfd987193)

FF(a,b,c,d,M14,17, 0xa679438e)

FF(a,b,c,d,M15,22,0x49b40821)

第二轮:

GG(a,b,c,d,M1,5,0xf61e2562)

GG(a,b,c,d,M6,9,0xc040b340)

GG(a,b,c,d,M11,14,0x265e5a51)

GG(a,b,c,d,M0,20,0xe9b6c7aa)

GG(a,b,c,d,M5,5,0xd62f105d)

GG(a,b,c,d,M10,9,0×02441453)

GG(a,b,c,d,M15,14,0xd8a1e681)

GG(a,b,c,d,M4,20,0xe7d3fbc8)

GG(a,b,c,d,M9,5,0x21e1cde6)

GG(a,b,c,d,M14,9,0xc33707d6)

GG(a,b,c,d,M3,14,0xf4d50d87)

GG(a,b,c,d,M8,20,0x455a14ed)

GG(a,b,c,d,M13,5,0xa9e3e905)

GG(a,b,c,d,M2,9,0xfcefa3f8)

GG(a,b,c,d,M7,14,0x676f02d9)

GG(a,b,c,d,M12,20,0x8d2a4c8a)

第三轮:

HH(a,b,c,d,M5,4,0xfffa3942)

HH(a,b,c,d,M8,11,0x8771f681)

HH(a,b,c,d,M11,16,0x6d9d6122)

HH(a,b,c,d,M14,23,0xfde5380c)

HH(a,b,c,d,M1,4,0xa4beea44)

HH(a,b,c,d,M4,11,0x4bdecfa9)

HH(a,b,c,d,M7,16,0xf6bb4b60)

HH(a,b,c,d,M10,23,0xbebfbc70)

HH(a,b,c,d,M13,4,0x289b7ec6)

HH(a,b,c,d,M0,11,0xeaa127fa)

HH(a,b,c,d,M3,16,0xd4ef3085)

HH(a,b,c,d,M6,23,0x04881d05)

HH(a,b,c,d,M9,4,0xd9d4d039)

HH(a,b,c,d,M12,11,0xe6db99e5)

HH(a,b,c,d,M15,16,0x1fa27cf8)

HH(a,b,c,d,M2,23,0xc4ac5665)

第四轮:

Ⅱ(a,b,c,d,M0,6,0xf4292244)

Ⅱ(a,b,c,d,M7,10,0x432aff97)

Ⅱ(a,b,c,d,M14,15,0xab9423a7)

Ⅱ(a,b,c,d,M5,21,0xfc93a039)

Ⅱ(a,b,c,d,M12,6,0x655b59c3)

Ⅱ(a,b,c,d,M3,10,0x8f0ccc92)

Ⅱ(a,b,c,d,M10,15,0xffeff47d)

Ⅱ(a,b,c,d,M1,21,0x85845dd1)

Ⅱ(a,b,c,d,M8,6,0x6fa87e4f)

Ⅱ(a,b,c,d,M15,10,0xfe2ce6e0)

Ⅱ(a,b,c,d,M6,15,0xa3014314)

Ⅱ(a,b,c,d,M13,21,0x4e0811a1)

Ⅱ(a,b,c,d,M4,6,0xf7537e82)

Ⅱ(a,b,c,d,M11,10,0xbd3af235)

Ⅱ(a,b,c,d,M2,15,0x2ad7d2bb)

Ⅱ(a,b,c,d,M9,21,0xeb86d391)
  
第四步:拼接结果

这一步就很简单了,把循环加工最终产生的 A,B,C,D 四个值拼接在一起,转换成字符串即可。




文章转载:
漫画趣解MD5算法

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。