设为首页 加入收藏

TOP

Redis源码中探秘SHA-1算法原理及其编程实现(四)
2015-11-21 01:34:57 来源: 作者: 【 】 浏览:3
Tags:Redis 源码 探秘 SHA-1 算法 原理 及其 编程 实现
着定义了结构体类型CHAR64LONG,并声明了一个该类型的指针变量block(实际是数组实现),前面有介绍。然后:
memcpy(block, buffer, 64);
将参数buffer里面的字节复制到block中。
    a = state[0];
    b = state[1];
    c = state[2];
    d = state[3];
    e = state[4];
实际上完成的就是RFC文档中的H0~H4赋值给ABCDE的操作。接下来就是80轮运算的代码。每20轮为一组,共分四组。
    R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
    R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
    R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
    R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
    R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
    ...
第一组比较特殊,使用了R0和R1两个宏函数,其原因前面已经介绍了。因为第0~15轮运算和16~79轮运算的时候消息块M(i)和字块W(i)的转换是不一样的。后面的20~39轮,40~59轮,60~79轮就是依次使用的R2,R3,R4来运算了,比较好理解,就不表了。接着:
    state[0] += a;
    state[1] += b;
    state[2] += c;
    state[3] += d;
    state[4] += e;
    /* Wipe variables */
    a = b = c = d = e = 0;
完成的就是更新缓冲区H0~H4的内容。然后把a~e清空为0(这一步我感觉意义不到,本身就是栈存储的5个变量,函数结束后就释放了啊)。 最后state[0]~state[4]中存储的就是SHA-1算法的生成的消息摘要。
首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MyBtis注解方式注册异常 下一篇数据库-关系代数与关系运算

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: