如何正确地将TAG值转换为正确的格式以便验证HMAC?

时间:2015-08-01 18:17:57

标签: c hash hmac

我正在进行HMAC生成和验证以检查数据完整性。我可以正确生成MAC值但是当通过套接字将其发送到另一个程序进行验证时,我遇到了格式不匹配问题。我感谢您的支持。感谢。

unsigned char* MAC(unsigned char* key,unsigned char* message)  
{
    unsigned char* result;
    unsigned int result_len = 32;  
    int i;        
    result = (unsigned char*) malloc(sizeof(char) * result_len);
    result = HMAC(EVP_sha256 (), key , strlen (key), message , strlen(message) , NULL, NULL);   
    return result;
} 

int verifyMAC(unsigned char* key,unsigned char* message, unsigned char* receivedTag)
{
    printf("\n\n ==================== MAC Verification ==================\n\n");
    unsigned char* newHash; // newly generated hash value
    unsigned int newHash_len = 32;  
    int  i,flag=0;   
    newHash = (unsigned char*) malloc(sizeof(char) * newHash_len);
newHash = HMAC(EVP_sha256 (), key , strlen (key), message , strlen(message) , NULL, NULL); 
    for (i=0; i!=newHash_len; i++)
    {
            if (receivedTag[i]!=newHash[i])
            {
                printf("DATA MISMATCH: Found %02X instead of %02X at index %d!\n", newHash[i], receivedTag[i], i);
                break;
            }
    }
    if (i==newHash_len)
    {
        printf("MAC verified!\n");
        flag = 1;
    } 
    return flag;
}

int main(int argc, char *argv[])
{

    unsigned char* key = "1234567890";
    unsigned char* message = (unsigned char*) "hello world";
    …
}

控制台结果:

Hashed data:  E4  5F  60  72  61  7C  CE  5E  06  A9  5B  E4  81  C4  33  51  02  3D  99  23  35  99  EA  C9  FD  AF  FC  95  81  42  62  9A 


==================== MAC Verification ==================

DATA MISMATCH: Found E4 instead of 65 at index 0!
ERROR: data is modified

0 个答案:

没有答案