【问题标题】:MD5 hashing using union for struct types对结构类型使用联合的 MD5 散列
【发布时间】:2015-11-03 05:28:04
【问题描述】:

我想知道是否推荐使用 union 命令进行 MD5 哈希? 我想使用 union 的原因是因为我想做一个像下面这样的结构。

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

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

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

【问题讨论】:

  • 请注意,union 不是 C 中的命令

标签: c md5 unions


【解决方案1】:

要计算某些内存数据的校验和,您可以将指向该数据的指针转换为 (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(并且取决于endianness 等...)。所以不同机器上的内存MD5可能不同。

【讨论】:

    猜你喜欢
    • 2013-04-26
    • 2019-05-08
    • 1970-01-01
    • 2015-02-06
    • 2019-06-01
    • 1970-01-01
    • 2020-04-14
    • 2020-04-19
    • 2012-06-17
    相关资源
    最近更新 更多