为什么哈希值错了?

时间:2014-11-05 22:12:10

标签: c hash openssl md5 hmac

我已经尝试了一段时间并且不断获得错误的哈希值。我知道这是错误的,因为我已经对在线HMAC计算器进行了检查

unsigned char data[]="data";
unsigned char key[MD5_DIGEST_LENGTH]; 
MD5(data, strlen(data), key);   

unsigned char* t;
t=HMAC(EVP_md5(),key,16,data, 16,NULL,NULL);

for(i = 0; i < 20; i++)
{
    sprintf(&mdString[i*2], "%02x", t[i]); //totally wrong value
}

1 个答案:

答案 0 :(得分:0)

要获得与在线生成器匹配的HMAC,它就是一个简单的;

unsigned char* data = "data";
unsigned char* key  = "key";
unsigned char* t;

t = HMAC(EVP_md5(), key, strlen(key), data, strlen(data), NULL, NULL);

for(i = 0; i < 16; i++)
{
    sprintf(&mdString[i*2], "%02x", t[i]);
}

在您的示例中,您在计算HMAC之前在密钥上使用MD5,这不是在线生成器所做的。当然,如果您的密钥或数据不是常规的空终止字符串,则需要将strlen调用替换为实际长度。