2015-10-04 79 views
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是移位,但還是我不不知道它是什麼樣的左旋糖。

+0

對於我自己的好奇心,還有什麼其他類型的旋轉呢?你的問題,答案和維基百科都記錄了我所聽說過的32位整數的唯一旋轉。那裏還有什麼? –

+0

只有一種類型的左旋,即旋轉旋轉(Wut?)。沒有「邏輯旋轉」這樣的東西。 – harold

+0

有不同的,他們都旋轉(duhhh),但有不同的類型(邏輯移位,循環移位,通過進位),我想知道哪一個。 –

回答

0

找到了答案,而使用Google的一些其他問題here

有點旋轉也被稱爲一個循環移位旋轉,額外的信息可以在這裏找到: - Circular shift - Bitwise operations

圓形換檔的換檔數字剩下一個x的數量,追加額外的結尾。

enter image description here