Progrma说哈希是不同的,但不是

时间:2016-12-02 00:42:51

标签: c

我有一个程序从文件生成散列键并显示该散列。我试图检查结果散列键是否对应于预期的散列键。但是这不起作用,因为当哈希键与我预期的相同时,消息说"哈希是不同的"。你看到什么是不正确的吗?

与问题相关的一些变量。

    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 );
}

1 个答案:

答案 0 :(得分:2)

类型存在一些重大问题,至少在比较中是

if(hashResult == hashExpected){

hashResultCHARhashExpected(没有数组索引)是内存中CHAR数组开始的地址。您需要比较存储在该数组中的实际值,而不仅仅是它所在的地址。

编辑:我注意到hashResultCHAR,而不是数组,如前所述。无论哪种方式,hashResult == hashExpected比较都不合适。