根据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
感谢预先SO社区