比较c中的哈希值

时间:2016-05-12 17:30:16

标签: c hash sha256

我想比较和匹配哈希:

#include <stdio.h>
#include <string.h>
#include "sha256.h"

int main()
{
   unsigned char password[]={"abc"}, gen_hash[32];
   SHA256_CTX ctx;

   sha256_init(&ctx);
   sha256_update(&ctx,password,strlen(password));
   sha256_final(&ctx,gen_hash);

   unsigned char orig_hash[] = {"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"};

   if(strcmp(orig_hash, gen_hash) == 0)
   {
    printf("%s\n", "match");
   }
   return 0;
}

但如果我比较两个哈希值,它们就不一样了。有谁碰巧知道为什么?我认为两个变量都是一样的,但它们不是吗?

1 个答案:

答案 0 :(得分:5)

两点:

  1. 不要使用strcmp,而是使用memcmp,因为生成的哈希gen_hash最后不会有'\ 0'。

  2. 您将orig_hash定义为

    unsigned char orig_hash[] = {"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"};

  3. 是一串字符。您应该将其定义为数字数组:

    unsigned char orig_hash[] = {0xba, 0x78, 0x16, 0xbf, ...};