0
在這段MD5維基百科網站的僞代碼中,完全可用here,有一個假功能左旋()。MD5散列算法使用哪種類型的轉換?
for each 512-bit chunk of message
break chunk into sixteen 32-bit words M[j], 0 ≤ j ≤ 15
//Initialize hash value for this chunk:
var int A := a0
var int B := b0
var int C := c0
var int D := d0
//Main loop:
for i from 0 to 63
if 0 ≤ i ≤ 15 then
F := (B and C) or ((not B) and D)
g := i
else if 16 ≤ i ≤ 31
F := (D and B) or ((not D) and C)
g := (5×i + 1) mod 16
else if 32 ≤ i ≤ 47
F := B xor C xor D
g := (3×i + 5) mod 16
else if 48 ≤ i ≤ 63
F := C xor (B or (not D))
g := (7×i) mod 16
dTemp := D
D := C
C := B
B := B + leftrotate((A + F + K[i] + M[g]), s[i])
A := dTemp
end for
//Add this chunk's hash to result so far:
a0 := a0 + A
b0 := b0 + B
c0 := c0 + C
d0 := d0 + D
end for
var char digest[16] := a0 append b0 append c0 append d0 //(Output is in little-endian)
//leftrotate function definition
leftrotate (x, c)
return (x << c) binary or (x >> (32-c));
然而,爲leftrotate()函數邏輯旋轉或圓形旋轉?當我查看bitwise operations wikipedia上的功能時,我看到了不同的左旋向。 MD5散列函數使用哪一個?
的旋轉在第一維基百科的定義爲:
leftrotate (x, c)
return (x << c) binary or (x >> (32-c));
在RFC 1321的功能制定不同的,就像這樣:
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s)
其中S是移位,但還是我不不知道它是什麼樣的左旋糖。
對於我自己的好奇心,還有什麼其他類型的旋轉呢?你的問題,答案和維基百科都記錄了我所聽說過的32位整數的唯一旋轉。那裏還有什麼? –
只有一種類型的左旋,即旋轉旋轉(Wut?)。沒有「邏輯旋轉」這樣的東西。 – harold
有不同的,他們都旋轉(duhhh),但有不同的類型(邏輯移位,循環移位,通過進位),我想知道哪一個。 –