2012-02-20 8 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バイトのバイナリBLOBです。それを文字列として印刷することはできません。例: 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(""); 

注上記は、同様のcharであることをoutを変更すること、それは、char *

+0

素晴らしい作品、することはできません。ありがとう。 私はそれが関数によって返されるバイナリであることを理解しています。しかし、PHPのmd5()と同じように、データをASCIIテキストで保存する必要があります。私は少し周りを遊んだが、返されたBLOBの多くのビットがちょうどffであることが分かった - asciiによると印字可能な記号はない。一般的なオフセットはありますか? PHP md5()は? – braindump

+0

さて、自分で見つけました。署名されていないものを作るだけです。 m) – braindump

関連する問題