Winapi 多次调用CryptHashData
我推测这是在创建一个md5散列,但对散列的确切内容感到困惑Winapi 多次调用CryptHashData,winapi,Winapi,我推测这是在创建一个md5散列,但对散列的确切内容感到困惑 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
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
charval1[4]={…};
DWORD val2=。。。;
CryptCreateHash(hCryptProv、CALG_MD5、0、0和hHash)//创建哈希对象
CryptHashData(hHash,reinterpret_cast(val1),sizeof(val1),0)//执行hash#1
CryptHashData(hHash,reinterpret_cast(val2),sizeof(val2),0)//执行hash#2
散列1和散列2是如何结合的
它是否执行md5(md5(val1)+val2)?还是md5(val1+val2)?或者我根本没有考虑的东西?CryptHashData将您的数据添加到哈希对象中。如果稍后调用
CryptGetHashParam
,将得到val1+val2的哈希值。CryptHashData
将数据添加到哈希对象中。如果稍后调用CryptGetHashParam
将得到val1+val2的哈希值。因此,例如,如果val2为0,那么我应该能够删除第二个哈希调用,而不会对最终哈希值产生任何影响?这似乎不是问题所在case@LemonBeagle事实并非如此,因为如果将值为0的DWORD添加到哈希对象,则数据的长度会发生更改。值为零并不意味着没有数据添加到哈希对象。这意味着将值为0的sizeof(DWORD)数据添加到哈希对象中。Aha。。我只是简单地添加,而不是连接。。。谢谢所以当我得到15分的时候muchI会投票支持你。。。我希望我现在可以,这真的很有帮助,谢谢。例如,如果val2是0,那么我应该能够删除第二个哈希调用,而不影响最终的哈希值?这似乎不是问题所在case@LemonBeagle事实并非如此,因为如果将值为0的DWORD添加到哈希对象,则数据的长度会发生更改。值为零并不意味着没有数据添加到哈希对象。这意味着将值为0的sizeof(DWORD)数据添加到哈希对象中。Aha。。我只是简单地添加,而不是连接。。。谢谢所以当我得到15分的时候muchI会投票支持你。。。我希望我现在可以,这真的很有帮助,谢谢