2015-11-03 53 views
1

我想知道是否建議使用union命令來執行MD5哈希? 我想使用union的原因是因爲我想要做如下的哈希結構。使用聯合進行結構類型的MD5哈希

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

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

因爲#include <openssl/md5.h>需要字符類型這是我能想到的唯一的東西。請告訴我。

+0

請注意,在C中'union'是* not * a * command * –

回答

1

計算一些在內存中的數據的校驗,你可以將指針強制轉換爲數據(char*),並把它傳遞給MD5

struct yourstruct_st data; 

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

要注意的是,編譯器可以添加paddingstruct(或union等等......) - 並且可能不會初始化填充字節。要有可重複的校驗和,您需要確保內存區域的所有字節(包括填充)都已定義好。例如,如果該區域是malloc -ed,則在填充它之前,您應該將其全部全部(與memset(ptr, 0, sizeof(*ptr));)清零。

當然,某些struct的內存中表示是特定於您的處理器和ABI(並取決於endianness等)。因此,不同機器上的內存MD5可能會有所不同。