2012-02-20 20 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