MD5回合操作RFC1321

时间:2019-01-02 14:49:22

标签: python cryptography md5

根据md5函数的documentation,第4步涉及其中的函数回合

  

让[abcd k s i]表示操作

     

a = b +((a + F(b,c,d)+ X [k] + T [i])<<< s)。

     

执行以下16个操作。

我不确定“ +”在此操作中的含义是加法运算还是按位与运算。在本文的早期,它指出

  

让符号“ +”表示单词的加法(即,模2 ^ 32      加成)。令X <<< s表示通过循环获得的32位值      将X左移(旋转)s个位。

我知道[abcd]是32位“字”,T [i]是浮点型(ive转换为32位字,而X [k]是单个位。通过按位AND进行此功能,结果为函数的结尾始终是32位的FALSE字符串,这使我认为某个地方出了问题。

这是负责的python代码:

    # parse to bitarrays
    xb = bitarray(str(x))
    tb = bitarray(str(t))

    value = b & ((a & F(b,c,d) & xb & tb)) # value always turns false
    value = leftshift(value, s)
    return value

变量屏幕快照可能有用。 enter image description here

感谢预先SO社区

1 个答案:

答案 0 :(得分:0)

当规范中说+表示使用32位加法而不是按位+的32位加法实现and

如有疑问,您可以看到other MD5 implementations