2012-02-06 134 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