哈希函数-MD5算法

MD5 通过4轮运算(每轮16步,共64步),将任意长的消息压缩成为一个128bit的消息摘要,使用了4个32bit的寄存器。

 

MD结构

MD结构是基于迭代式结构来构造碰撞稳固的Hash函数的方法,即通过某一碰撞稳固的压缩函数(从较大的固定长度的输入集合映射到相对小的有固定长度的输出集合的函数)????:0,1????????0,1????0,1????来构造出碰撞稳固的Hash函数????:0,1∗0,1????。

基于MD结构的有固定初始值的Hash函数一般形式

哈希函数-MD5算法

????????∈0,1????为Hash函数的固定初始值,消息串????∈0,1∗首先被拆分成长度为(m+t)比特的数据块????0, ????1, ⋯ ????????−1和最后一个填充有消息串M长度信息的数据块????????(MD strengthening 结构),然后通过L次压缩函数f处理????????????⋯????????????,????0⋯,????????−1,????????可以得出消息串M的消息摘要。

 

MD5算法

MD5将任意长的消息压缩成为一个128bit的输出。

MD5算法原理:MD5以512位分组来处理输入的消息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,经过这四个32位分组将生成一个128位散列值。

MD5算法中,首先需要对消息进行填充,使其字节长度对512求余的结果等于448。字节长度扩展至N*512+448(位),即N*64+56个字节。填充方法是在消息的后面填充一个1和无数0,直到满足扩展的字节长度为止。然后,在这个结果后面附加一个64位二进制表示的填充前信息长度。现在消息的字节长度为N*512+448+64=(N+1)*512

哈希函数-MD5算法

初始化MD缓冲器。用一个4个字节的缓冲器(32位的寄存器,初始化使用的是十六进制表示的数字,MD5中这四个32位被称作链接变量的整数参数)来计算消息摘要。

设置好这四个链接变量后,就开始进入算法的四轮循环运算,循环的次数是消息中512位分组的数目N。

主循环有四轮,每轮循环都很相似。

哈希函数-MD5算法

 

MD5算法描述

MD5有4轮运算(每轮16步,共64步)。

MD5算法每步运算由整数模2^32加法、布尔函数和左循环移位组成。它把消息块(512比特)和前一次压缩函数运算的128位输出结果作为压缩函数新的输入值运算出更新的128位输出结果,经过多次迭代运算最后得出MD5消息摘要。

哈希函数-MD5算法

每次操作对a、b、c、d中的其中三个做一次非线性函数运算(布尔函数),然后将所得结果加上第四个变量,一个子分组(512比特),和一个常数。再将所得结果左移一个不定的数(有一定规律),并加上a、b、c、d中之一。最后将该结果赋值给a、b、c、d中之一。

四个非线性函数,

 

哈希函数-MD5算法

哈希函数-MD5算法