我有一個程序從一個文件生成一個哈希鍵,並顯示哈希。我試圖檢查結果散列鍵是否對應於預期的散列鍵。但是這不起作用,因爲當散列鍵與期望的相同時,我會得到「散列不同」的消息。你看到什麼是不正確的?Progrma說哈希是不同的,但它不是
一些與問題有關的變量。
BYTE rgbFile[BUFSIZE];
DWORD cbRead = 0;
BYTE rgbHash[MD5LEN];
DWORD cbHash = 0;
CHAR rgbDigits[] = "abcdef";
PCSTR filename = "c:\\Users\\jax\\Desktop\\files\\test.txt";
CHAR hashExpected[] = "4ab5d20e55ef73e4f412d73c2a201e";
在下面的代碼就是它顯示像「文件哈希‘4ab5d20e55ef73e4f412d73c2a201e’,並在那裏我有比較:
DWORD i;
CHAR hashResult= "";
printf("Hash of file %s is: ", filename);
for (i = 0; i < cbHash; i++)
{
printf("%c%c",
rgbDigits[rgbHash[i] >> 4],
rgbDigits[rgbHash[i] & 0xf]);
hashResult = rgbDigits[rgbHash[i] >> 4];
hashResult += rgbDigits[rgbHash[i] & 0xf];
}
printf("\n");
printf(hashResult);
if(hashResult == hashExpected){
printf("hash is the same");
}
else{
printf("hash is different");
}
更新:我也總是得到消息」消息不正確「:
DWORD i;
CHAR hashResult[] = {};
printf("Hash of file %s is: ", filename);
for (i = 0; i < cbHash; i++)
{
printf("%c%c",
rgbDigits[rgbHash[i] >> 4],
rgbDigits[rgbHash[i] & 0xf]);
hashResult[i] = rgbDigits[rgbHash[i] >> 4];
hashResult[i] += rgbDigits[rgbHash[i] & 0xf];
}
if(hashResult == hashExpected){
printf("Hash is the same");
}
else{
printf("Hash is different");
}
更新:
BOOL test(char array1[] , char array2[])
{
int i;
for(i = 0; array1[i] && array2[i]; ++i)
{
if(array1[i] != array2[i])
{
return(FALSE);
}
}
return(TRUE);
}
您顯示的代碼不應該在沒有警告的情況下編譯。你有'CHAR a [] =「...」;'和'CHAR b =「」;'。你不能比較字符串與'=='是否相等,但是你可以。 –
想想你將如何比較兩個數組:逐個元素。只有在相應的元素相等時,兩個數組才相等。你不能只做一個比較,然後馬上知道哈希是一樣的,你必須等到你知道所有的東西都是一樣的。如果你發現一個元素不匹配,那麼你立即知道它們不相同。 – e0k
再次感謝您的回答。對於我所瞭解的你的幫助,我現在更新的代碼應該可以工作,因爲如果它發現兩個字母不同,它將返回false,如果都是icual,它將返回true。但我總是得到消息「哈希是不同的」,他們是icual。 – Jax