MD5算法的具体过程(md5是一种什么算法)

2023-02-19 9:21:43 密码用途 思思

MD5算法原理及实现

散列函数,也称作哈希函数,消息摘要函数,单向函数或者杂凑函数。散列函数主要用于验证数据的完整性。通过散列函数,可以创建消息的“数字指纹”,消息接收方可以通过校验消息的哈希值来验证消息的完整性,防止消息被篡改。散列函数具有以下特性:

任何消息经过散列函数处理后,都会产生一个唯一的散列值,这个散列值可以用来验证消息的完整性。计算消息散列值的过程被称为“消息摘要”,计算消息散列值的算法被称为消息摘要算法。常使用的消息摘要算法有:MD—消息摘要算法,SHA—安全散列算法,MAC—消息认证码算法。本文主要来了解MD算法。

MD5算法是典型的消息摘要算法,它是由MD4,MD3和MD2算法演变而来。无论是哪一种MD算法,其原理都是接受一个任意长度的消息并产生一个128位的消息摘要。如果把得到的消息摘要转换成十六进制字符串,则会得到一个32字节长度的字符串,我们平常见到的大部分MD数字指纹就是一个长度为32的十六进制字符串。

假设原始消息长度是b(以bit为单位),注意这里b可以是任意长度,并不一定要是8的整数倍。计算该消息MD5值的过程如下:

在计算消息的MD5值之前,首先对原始信息进行填充,这里的信息填充分为两步。

第一步,对原始信息进行填充,填充之后,要求信息的长度对512取余等于448。填充的规则如下:假设原始信息长度为b bit,那么在信息的b+1 bit位填充1,剩余的位填充0,直到信息长度对512取余为448。这里有一点需要注意,如果原始信息长度对512取余正好等于448,这种情况仍然要进行填充,很明显,在这时我们要填充的信息长度是512位,直到信息长度对512取余再次等于448。所以,填充的位数最少为1,最大为512。

第二步,填充信息长度,我们需要把原始信息长度转换成以bit为单位,然后在第一步操作的结果后面填充64bit的数据表示原始信息长度。第一步对原始信息进行填充之后,信息长度对512取余结果为448,这里再填充64bit的长度信息,整个信息恰好可以被512整除。其实从后续过程可以看到,计算MD5时,是将信息分为若干个分组进行处理的,每个信息分组的长度是512bit。

在进行MD5值计算之前,我们先来做一些定义。

下面就是最核心的信息处理过程,计算MD5的过程实际上就是轮流处理每个信息分组的过程。

MD5算法实现如下所示。

这里也和Java提供的标准MD5算法进行了对比,通过测试可以看到该MD5计算的结果和Java标准MD5算法的计算结果是一样的。

MD5算法的具体过程(md5是一种什么算法) 第1张

MD5算法原理实现以及常用方法汇总

哈希算法又称散列算法,是将任何数据转换成固定长度的算法的统称。 从本质上讲,MD5也是一种哈希算法,其输出是生成128位的输出结果。 如果输入两个不同的明文,就会输出两个不同的输出值,并且根据输出值,不能得到原始的明文,这个过程是不可逆的。

MD5算法对512位报文的输入信息进行处理,每个报文被分成16个32位报文。 经过一系列处理后,算法的输出由4个32位的数据包组成,这些数据包能联生成一个128位的哈希值。

在MD5算法中,信息的填写方式是这样的:消息后面跟着一个1,然后是无数个0,直到512字节的剩余数等于448 (n*512) + 448。 为什么剩下的是448,因为剩下的512-448是64位,表示填充前的消息长度。 加上剩下的64位,(n+1)乘以512,也就是512的整数倍。

然后循环通过link变量获得结果。 MD5包含四个32位整数参数,称为链接变量:A=0x01234567, B= 0x89ABCdef, C= 0xFeDCba98, D=0x76543210。 一旦设置好四个链接变量,算法就开始了四轮循环。 具体的内部计算是关于数学的。如果你感兴趣,你可以自己理解。这里没有更多的解释。

MD5的算法原理

MD5简介:

MD5是Message-digestAlgorithm5(信息-摘要算法)的缩写,经MD2、MD3和MD4发展而来。它是把一个任意长度的字节串变换成一定长的大整数。MD5算法是在MD4的基础上增加了“安全-带子”(safety-belts)的概念。虽然MD5比MD4稍微慢一些,但却更为安全。这个算法很明显的由四个和MD4设计有少许不同的步骤组成。在MD5算法中,信息摘要的大小和填充的必要条件与MD4完全相同。由于MD5算法的使用不需要支付任何版权费用,所以在一般的情况下MD5不失为一种非常优秀的中间技术。

MD5原理:

MD 5算法是对输入信息进行初始化处理后,以512位分组来处理输入的信息,每一分组又被划分

成为16个32位子分组,经过了一系列的变换处理后,输出由四个32位分组,再将这四个32位分组级

联后生成一个128位散列值[5- 6]。具体过程如下:

(1)首先对信息进行填充,即在信息的后面填充一个1和若干个0使其字节长度对512求余的结

果等于448。

(2)对MD 5进行初始化,即MD 5中用四个32位被称作链接变量的整数参数,它们分别为:A =

0x01234567,B = 0x89abcdef,C = 0xfedcba98,D =0x76543210。

(3)开始进入算法的四轮循环运算。循环的次数是信息中512位信息分组的数目。将上面四个链

接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。主循环有四轮,第一轮进行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)=(xz) (y&(~z))

h(x,y,z)=x y z

i(x,y,z)=y (x (~z))

(其中:“&”是与运算,“ ”是或运算,“~”是非运算,“ ”是异或运算,它们都是位运算符。)

这四个函数的说明:如果x、y和z的对应位是独立和均匀的,那么结果的每一位也应是独立和均

匀的。f是一个逐位运算的函数。即,如果x,那么y,否则z。函数h是逐位奇偶操作符。假设mj表示

消息的第j个子分组(从0到15),ti为第I步中的常数, s表示循环左移s位,

则四种操作为:ff(a,b,c,d,mj,s,ti)表示a=b+((a+(f(b,c,d)+mj+ti) s)

gg(a,b,c,d,mj,s,ti)表示a=b+((a+(g(b,c,d)+mj+ti) s)

hh(a,b,c,d,mj,s,ti)表示a=b+((a+(h(b,c,d)+mj+ti) s)

ii(a,b,c,d,mj,s,ti)表示a=b+((a+(i(b,c,d)+mj+ti) s)

常数ti表示在第i步中,ti是4294967296*abs(sin(i))的整数部分,4294967296等于2的32次

方,i的单位是弧度。所有这些完成之后,将A、B、C、D分别加上a、b、c、d。然后用下一分组

数据继续运行算法,最后的输出是A、B、C和D的级联。

MD5加密算法是什么呢?

C.报文摘要

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。

md5是什么 如何计算MD5

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。

MD5算法具有以下特点:

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。

2、容易计算:从原数据计算出MD5值很容易。

3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的16进制数字串)。

大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为司法机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的MD5“数字指纹”,如果任何人对文件做了任何改动,其MD5也就是对应的“数字指纹”都会发生变化。