2012-02-20 79 views
0

我使用Peter Deutsch's implementation of MD5實現一個簡單的密碼檢查。我使用這種方式:C:MD5給垃圾作爲結果

md5_state_t md; 
char *in = "Hello World"; 
char *out[16]; 

md5_init(&md); 
md5_append(&md, in, strlen(in)); 
md5_finish(&md, out); 

printf("In: %s\n", in); 
printf("Out: %s\n", out); 

問題是,我得到這樣一個結果:

In: Hello World 
Out: ? 
??d?uA????.?? 

有沒有人有一個想法,怎麼回事錯在這裏?

回答

3

MD5哈希是16個字節的二進制斑點。您無法將其打印爲字符串。打印例如在十六進制表示:

md5_state_t md; 
char *in = "Hello World"; 
char out[16]; 
int i; 

md5_init(&md); 
md5_append(&md, in, strlen(in)); 
md5_finish(&md, out); 

printf("In: %s\n", in); 
printf("Out: "); 
for(i = 0; i < 16: i++) 
    printf("%02X", out[i]); 
puts(""); 

注意的是,上述變化out是一個字符爲好,它不可能是一個char *

+0

作品,偉大的。謝謝。 我明白,它是一個二進制,由函數返回。但我希望數據以ascii文本形式存儲,就像PHP md5()一樣。我玩了一段時間,但發現返回的blob中有很多位只是ff - 所以根據ascii沒有可打印的符號。是否有任何通用偏移量,例如PHP md5()使用? – braindump 2012-02-20 10:32:06

+0

好的,我自己找到了。只要做出[]無符號。 M) – braindump 2012-02-20 11:22:20