MD5压缩算法心得

    看到网上许多关于MD5算法的文章,大体上都是一个版本,晦涩难懂,看的云里雾里。到现在才理解了些皮毛,写出来给大家分享下。

    MD5算法的全称是Message Digest Algorithm(消息摘要算法第五版),是计算机安全领域广泛使用的一个压缩加密的哈希算法,主要提供消息完整化。知道这个算法可以压缩加密就可以了。

    算法的主要思想就是:讲输入的信息分割成许多分组(长度为L),每个分组有512位(注意是位,MD5中是以位操作的)。然后又将每个分组划分为16个分组,每个分组有32组,经过一些处理后,输出一个128位的散列值。

    首先对输入的信息(假设位长度是BL)进行分组,要确保每个分组都够512位,但是不可能输入的信息的位数每次都是512的倍数,所以就问题来了,如何保证是512的倍数呢?舍弃最后一个分组,如果只有一组呢?舍弃这种办法是行不通了,那就只剩填充了。填充的话,有个规定:填充后的位数对512求余的结果是448,所以信息的位长度变成了N*512+448,也就是N*54+56个字节,N是正整数。填充的规则是在信息的后面添加一个1和若干个0,直到位长度是N*512+448,然后再在后面加上这个信息的原位长度BL的64位二进制表示,现在信息的长度变成了(N+1)*512位。这两步的作用是是信息长度恰好是512的整数倍,同时确保不同的消息在填充后不一样。

      MD5中有4个32位的整数参数,叫做链接变量,分别是

     A = 0x01234567

     B = 0x89abcdef

     C = 0xfedcba98

     D = 0x76543210

     设置好这四个链接变量后,就进入算法的四轮循环运算,循环的次数是L。将上面4个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。

     算法主循环有四轮,每轮基本上都很相似,第一轮进行16次操作,每次对abcd中三个做一次函数运算,然后将所得的结果依次加上第四个变量,信息的一个子分组和一个常数。再将结果向右移动一个不定的数,并加上abcd中一个,然后将该结果替换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)) 
      (&是与,|是或,~是非,^是异或) 


      这些函数是这样设计的:如果X、Y和Z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值