首页 > 编程知识 正文

md5算法复杂度(md5加密算法原理及实现)

时间:2023-05-04 13:24:53 阅读:2118 作者:1436

md5算法的简单描述可以如下:md5处理512位数据包中的输入信息,每个数据包分为16个32位的子数据包。经过一系列处理后,该算法的输出由四个32位数据包组成,这些数据包将被级联以生成一个128位哈希值。

在md5算法中,首先需要填充信息,使得512字节的余数的结果等于448。因此,信息的比特长度将扩展到n*512 448,即n*64 56字节,其中n是正整数。填充方法如下:在信息后面填充一个1和无数个0,在满足上述条件之前,停止用0填充信息。然后,将64位二进制形式的预填充信息长度附加到该结果上。经过这两步,当前信息字节长度=n * 512 448 64=(n ^ 1)* 512,也就是长度只是512的整数倍。这样做的原因是为了满足后期处理对信息长度的要求。

Md5有四个32位整数参数,称为chaining variable,它们是:a=0x01234567,b=0x89abcdef,c=0xedcba98,d=0x76543210。

当这四个链接变量被设置时,算法的四轮循环操作开始。周期数是信息中512位信息包的数量。

将以上四个链接变量复制到其他四个变量中: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)=(xy)|(~ 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代表消息的jth子分组(从0到15),

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