[問題] MD5實作中位元左移的問題
我在MD5雜湊函數的實作中,有一點一直很不明白,就是關於位元左移的部份
我看MD5的運算原理中,壓縮函數的每個回合的每個步驟都會左移不同的位元數
在我的理解中,應該只要依照位元數的不同去左移即可(Ex: m[i] << s[i])
但是我Google了一下高手寫的C++實作函數裏面,在位元左移的函數部份code如下:
參考網址:http://www.zedwood.com/article/121/cpp-md5-function
inline MD5::uint4 MD5::rotate_left(uint4 x, int n) {
return (x << n) | (x >> (32-n));
}
這樣的寫法是把左移後超出32bit的位元數,再用OR加回去
但讓我不懂的是,這所代表的意思到底是什麼?是取2的32次方的同餘加法的意思嘛?
有沒有高手實作過,或有高手理解這段程式碼的數學意義是什麼嘛?能夠幫我解惑一下嘛?
P.S. 在用雜湊函數的時候總覺得很方便,但是自己親自實作的時候才發現真的不好理解
RFC1312的文件(http://www.ietf.org/rfc/rfc1321.txt)
雖然有虛擬碼,但是沒有特別講到這一段,麻煩高手替我解惑,感激不盡
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.64.105.145
推
12/25 00:18, , 1F
12/25 00:18, 1F
→
12/25 00:19, , 2F
12/25 00:19, 2F
→
12/25 00:19, , 3F
12/25 00:19, 3F
推
12/25 00:23, , 4F
12/25 00:23, 4F
→
12/25 00:23, , 5F
12/25 00:23, 5F
→
12/25 00:24, , 6F
12/25 00:24, 6F
→
12/25 00:24, , 7F
12/25 00:24, 7F
→
12/25 00:25, , 8F
12/25 00:25, 8F
→
12/25 00:37, , 9F
12/25 00:37, 9F
→
12/25 00:37, , 10F
12/25 00:37, 10F