使用union进行结构类型的MD5哈希

时间:2015-11-03 05:28:05

标签: c md5 unions

我想知道是否建议使用union命令来执行MD5哈希? 我想使用union的原因是因为我想要哈希一个像下面这样的结构。

struct Body{
    int commandType;
    char data[MaxLine];
};

union UBody{
    Body    body;
    char    str[MaxLine + 4];
}

因为#include <openssl/md5.h>需要char类型,所以这是我唯一能想到的。请告诉我。

1 个答案:

答案 0 :(得分:1)

要计算某些内存数据的校验和,您可以将指向该数据的指针强制转换为(char*)并将其传递给MD5

struct yourstruct_st data;

char md5[MD5_DIGEST_LENGTH];
MD5((const unsigned char*)&data, sizeof(data), md5); 

请注意编译器可以将padding添加到struct(或union等...) - 并且可能不会初始化填充字节。要具有可重现的校验和,您需要确保内存区域的所有字节(包括填充)都已明确定义。例如,如果区域为malloc - 您应该在填充之前将所有(使用memset(ptr, 0, sizeof(*ptr));)归零。

当然,某些struct的内存中表示特定于您的处理器和ABI(并取决于endianness等...)。因此,内存中的MD5可以在不同的机器上有所不同。