2012-02-06 131 views
0

我收集這是創建一個MD5散列,但確切地說是什麼被哈希。多次調用CryptHashData

char val1[4] = {...}; 
DWORD val2 = ...; 

CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hHash) // Creates hash object 
CryptHashData(hHash, reinterpret_cast<const PBYTE>(val1), sizeof(val1), 0) // perform hash #1 
CryptHashData(hHash, reinterpret_cast<const PBYTE>(val2), sizeof(val2), 0) // perform hash #2 

散列#1與散列#2是如何組合的?

它執行md5(md5(val1)+ val2)嗎?或md5(val1 + val2)?或者我根本沒有考慮的東西?

回答

2

CryptHashData將您的數據添加到散列對象。如果您稍後調用CryptGetHashParam,則將獲得val1 + val2的散列。

+0

因此,如果val2爲0,例如,那麼我應該能夠刪除第二個哈希調用,而不會對最終的哈希值產生任何影響?這似乎並不是這種情況 – jglouie 2012-02-06 18:44:40

+0

@LemonBeagle它不是這樣,因爲如果你添加一個值爲0的DWORD到哈希對象,數據的長度改變了。值爲零並不意味着沒有數據被添加到散列對象。這意味着值爲0的sizeof(DWORD)數據被添加到散列對象。 – 2012-02-06 18:48:09

+0

阿哈..我只是簡單地加入,不拼接...非常感謝 – jglouie 2012-02-06 18:50:31