這些結果是否有意義?調試散列結果:長度,數組,字符
我想了解mhash是如何工作的,但沒有人知道這些結果是如何理解的?
MAC是char,並且基於strlen的它的長度是16然而 ,由mhash提供本示例程序輸出以下散列這是在十六進制格式(.X) 750c783e6ab0b503eaa86e310a5db738 而這個MAC [i的長度]是16倍的兩倍,任何人都有任何想法,爲什麼這可能是?
// output result
// 0x750c783e6ab0b503eaa86e310a5db738 (MD5) (32)
// mac length: 16
// md5 length: 16
#include <mhash.h>
#include <stdio.h>
#include <string.h>
int main()
{
char password[] = "Jefe";
int keylen = 4;
char data[] = "what do ya want for nothing?";
int datalen = 28;
MHASH td;
unsigned char *mac;
int i, j;
td = mhash_hmac_init(MHASH_MD5, password, keylen, mhash_get_hash_pblock(MHASH_MD5));
mhash(td, data, datalen);
mac = mhash_hmac_end(td);
int md5len = mhash_get_block_size(MHASH_MD5);
printf("0x");
for (i = 0; i < md5len; i++)
{
printf("%.2x", mac[i]);
}
printf("\n");
// I don't understand how the mac is a different size than the version printed out!?
printf("%x\n", mac);
int maclen = strlen(mac);
printf("mac length: %d\n", maclen);
printf("md5 length: %d\n", md5len);
exit(0);
}
另外,如果我嘗試輸出MAC用printf類似如下:
printf("%x\n", mac);
我會得到這樣的:
u
x>j����n1
]�8
爲mhash的API可以在這裏找到:http://mhash.sourceforge.net/mhash.3.html
感謝您的幫助提前
提示:單個字節的十六進制表示是兩位十六進制數字。 – zwol
您不能將字節數組打印爲%x。您必須循環訪問數據並逐個打印每個字節(最好爲%02x)。 – rslemos
printf(...,mac)將取得mac陣列的第一個字節的地址。 %x將嘗試以十六進制打印它。你的輸出在我看來更像是%s,因爲它有16個字節(假設每個換行符只增加一個字節,'\ n')。 – rslemos