Ich habe ein Programm, das einen Hash-Schlüssel aus einer Datei generieren und zeigt diesen Hash. Ich versuche zu überprüfen, ob der Ergebnis-Hash-Schlüssel dem erwarteten Hash-Schlüssel entspricht. Aber das funktioniert nicht, denn wenn der Hash-Schlüssel derselbe wie der erwartete ist, bekomme ich die Nachricht "Hash is different". Siehst du, was nicht stimmt?Progrma sagt, dass Hash ist anders, aber es ist nicht
Einige Variablen im Zusammenhang mit der Frage.
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";
Im folgenden Code ist, wo es eine Meldung wie „Hash der Datei ist‚4ab5d20e55ef73e4f412d73c2a201e zeigt‘und wo ich den Vergleich haben:
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");
}
Update: Auch bekomme ich immer die Meldung“ Falsche „:
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");
}
aktualisiert:
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);
}
Der angezeigte Code sollte nicht ohne Warnungen kompiliert werden. Sie haben sowohl 'CHAR a [] =" ... ";' und 'CHAR b =" ";'. Sie können Zeichenketten für Gleichheit nicht mit '==' vergleichen, aber Sie tun es. –
Denken Sie darüber nach, wie Sie zwei Arrays vergleichen würden: Element für Element. Zwei Arrays sind nur dann gleichwertig, wenn _all_ die entsprechenden Elemente gleich sind. Sie können nicht einfach einen Vergleich machen und dann sofort wissen, dass "Hash ist derselbe", Sie müssten warten, bis Sie wissen, dass alle gleich sind. Wenn Sie feststellen, dass ein Element nicht übereinstimmt, dann wissen Sie sofort, dass sie _nicht_ gleich sind. – e0k
Nochmals vielen Dank für Ihre Antwort. Für das, was ich mit Ihrer Hilfe verstanden habe, sollte der Code, den ich jetzt aktualisiere, funktionieren. Wenn er zwei Buchstaben unterscheidet, gibt er false zurück, und wenn alles icual ist, wird er wahr zurückgegeben. Aber ich bekomme immer die Nachricht "Hash is different" und sie sind icual. – Jax