我有一个程序从文件生成散列键并显示该散列。我试图检查结果散列键是否对应于预期的散列键。但是这不起作用,因为当哈希键与我预期的相同时,消息说"哈希是不同的"。你看到什么是不正确的吗?
与问题相关的一些变量。
BYTE rgbFile[BUFSIZE];
DWORD cbRead = 0;
BYTE rgbHash[MD5LEN];
DWORD cbHash = 0;
CHAR rgbDigits[] = "0123456789abcdef";
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");
}
更新:此外,我始终收到消息&#34;不正确&#34;:
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 );
}
答案 0 :(得分:2)
类型存在一些重大问题,至少在比较中是
if(hashResult == hashExpected){
hashResult
是CHAR
,hashExpected
(没有数组索引)是内存中CHAR
数组开始的地址。您需要比较存储在该数组中的实际值,而不仅仅是它所在的地址。
编辑:我注意到hashResult
是CHAR
,而不是数组,如前所述。无论哪种方式,hashResult == hashExpected
比较都不合适。