ファイルからハッシュキーを生成し、ハッシュを表示するプログラムがあります。結果ハッシュキーが予想されるハッシュキーに対応するかどうかを確認しようとしています。しかし、これはうまくいきません。なぜなら、ハッシュキーが期待どおりのときには、「ハッシュは違う」というメッセージが出るからです。あなたは正しいものが見えませんか?Progrmaはハッシュが異なると言っていますが、そうではありません
質問に関連するいくつかの変数。誤ったことが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");
}
アップデートまた、私は常にメッセージを取得し、私は比較を持っているところ」のようなメッセージを示しており、以下のコードで
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";
です「:
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 =" ";'の両方があります。文字列を '=='と比較することはできませんが、そうすることはできます。 –
2つの配列を比較する方法を考えてみましょう。 2つの配列は、対応する要素が等しい場合にのみ値が等しい。あなたはただ一つの比較を行い、それから即座に ''ハッシュが同じである ''ことを知ることはできません。あなたは_all_が同じであることを知るまで待たなければなりません。 1つの要素が一致しないことが分かった場合は、それらが同じではないことをすぐに知ることができます。 – e0k
もう一度お返事ありがとうございます。私があなたの助けによって理解したことは、私が今更新したコードがうまくいくはずです。なぜなら、2つの文字が異なる場合はfalseを返し、すべてがicualならtrueを返すからです。しかし、私はいつもメッセージ "ハッシュは違う"を得ていて、彼らはicualです。 – Jax