我想知道是否建议使用union命令来执行MD5哈希? 我想使用union的原因是因为我想要哈希一个像下面这样的结构。
struct Body{
int commandType;
char data[MaxLine];
};
union UBody{
Body body;
char str[MaxLine + 4];
}
因为#include <openssl/md5.h>
需要char类型,所以这是我唯一能想到的。请告诉我。
答案 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可以在不同的机器上有所不同。