2012-02-20 2 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입니다. 이것을 문자열로 인쇄 할 수는 없습니다. 예 : 인쇄하십시오. 헥스 표현 : 위의 변경 out뿐만 아니라 문자가 될 것을

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(""); 

주, 그것은 문자 *

+0

작품, 좋은 수 없습니다. 감사. 함수에서 반환 한 바이너리라는 것을 이해합니다. 하지만 PHP md5()처럼 데이터가 ASCII 텍스트로 저장되기를 바랍니다. 나는 조금 놀았지만 반환 된 blob의 많은 비트가 ff 인 것을 발견했습니다. ascii에 따르면 인쇄 가능한 부호가 없습니다. 일반적인 오프셋이 있습니까? 예 : PHP md5()가 사용합니까? – braindump

+0

알았어, 혼자서 찾았 어. 그냥 [] 서명하지 마십시오. 엠) – braindump

관련 문제