我已经尝试了一段时间并且不断获得错误的哈希值。我知道这是错误的,因为我已经对在线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
}
答案 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
调用替换为实际长度。