比较 c 中的哈希值
Compare hashes in c
我正在尝试比较和匹配哈希值:
#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;
}
但是如果我比较两个哈希,它们是不一样的。有没有人碰巧知道为什么?我以为两个变量是相同的,但它们不是吗?
两点:
不要使用 strcmp
而是 memcmp
因为生成的散列 gen_hash
末尾没有 '\0'。
您将 orig_hash
定义为
unsigned char orig_hash[] =
{"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"};
这是一串字符。您应该将其定义为数字数组:
unsigned char orig_hash[] = {0xba, 0x78, 0x16, 0xbf, ...};
我正在尝试比较和匹配哈希值:
#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;
}
但是如果我比较两个哈希,它们是不一样的。有没有人碰巧知道为什么?我以为两个变量是相同的,但它们不是吗?
两点:
不要使用
strcmp
而是memcmp
因为生成的散列gen_hash
末尾没有 '\0'。您将
orig_hash
定义为unsigned char orig_hash[] = {"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"};
这是一串字符。您应该将其定义为数字数组:
unsigned char orig_hash[] = {0xba, 0x78, 0x16, 0xbf, ...};