对结构类型使用 union 的 MD5 散列

MD5 hashing using union for struct types

我想知道是否推荐使用联合命令进行 MD5 哈希? 我想使用 union 的原因是因为我想散列如下所示的结构。

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

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

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

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

struct yourstruct_st data;

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

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

当然,某些 struct 的内存表示特定于您的处理器和 ABI (and depends upon the endianness,等等...)。所以内存中的MD5在不同的机器上可能是不同的。