thrift之compiler源码详解-MD5

      MD5的实现在md5.c文件里,它在compiler的作用是为了生成structure 和enum类型的fingerprinter,但fingerprinter暂没发现有何作用,哪位大牛若知道,请告知一下,谢谢!

     好了,下面简单介绍一下MD5的实现。

    MD5算法原理可查看:http://blog.csdn.net/whycold/article/details/8046271

    实现主要由四个函数组成:

 (1)md5_init函数

         该函数很简单,只有五行,初始化链接变量A、B、C、D,和信息位长,保存在md5_state_t类型的变量里。

(2)md5_process函数

        这个函数较为复杂些,它是实现MD5算法的四轮运算,如下所示:

  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)

  Ⅱ(a,b,c,d,Mj,s,ti)表示 a = b + ((a + I(b,c,d) + Mj + ti) << s)

        其中Mj表示消息(64位)的第j个子分组(从0到15),-个分组由4位组成;常数ti是4294967296*abs(sin(i))的整数部分,i取值从1到64,单位是弧度。相对于512位的消息位长,它是缩小版。这里对大小端字节序作了不同处理。

(3)md5_append函数

       该函数是添加消息字节数据,这里有个全局缓存,缓存里缓存字数节%64部份是未进行四轮运算的,该部份与新添加的字节数据结合,并每隔64位作一次四轮运算,即调用md5_process函数,最后不够64位的剩余数据保存到缓存里,留作下次处理。

(4)md5_finish函数

       该函数最终会生成MD5值,即MD5算法在此结束。这函数首先是填充信息使其位长为512,填充方法:在信息的后面填充一个1和无数个0至448位,接着在这个结果后面附加一个以64位二进制表示的填充前信息长度;然后调用两次md5_append函数进行四轮运算;最后返回16位的MD5值。

 

PS:MD5算法里巧秒地用了好多位转移运算符(如:<< , >>)。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值