2015-07-01 18 views
16

Bir dosyanın MD5 karmasını hesaplayan güzel bir bellek eşlemeli dosya örneğim var. Bu sorun olmadan iyi çalışıyor.C++ 'da bir dizenin MD5 değerini hesaplayın

Dizginin MD5 karmasını hesaplamak için bunu değiştirmek istiyorum.

Yani örnektir: Yaptığım değişimdir

unsigned char result[MD5_DIGEST_LENGTH]; 
boost::iostreams::mapped_file_source src(path); 
MD5((unsigned char*)src.data(), src.size(), result); 

std::ostringstream sout; 
sout<<std::hex<<std::setfill('0'); 
for(long long c: result) 
{ 
    sout<<std::setw(2)<<(long long)c; 
} 
return sout.str(); 

(dosyayla birini çalıştırmak istiyorsanız bu kod çalıştırmasına ve ayrıca şeyler artırmak için #include <openssl/md5.h> dahil):

std::string str("Hello"); 
unsigned char result[MD5_DIGEST_LENGTH]; 
MD5((unsigned char*)str.c_str(), str.size(), result); 

std::ostringstream sout; 
sout<<std::hex<<std::setfill('0'); 
for(long long c: result) 
{ 
    sout<<std::setw(2)<<(long long)c; 
} 
return sout.str(); 

Ama bu sonucu üretir:

8b1a9953c4611296a827abf8c47804d7 
Komut $ md5sum <<< Hello sonuç verirken

:

09f7e02f1290be211da707a266f153b3 

Neden sonuç kabul etmiyorum? Hangisi yanlış?

Teşekkürler.


DÜZENLEME:

yüzden oraya işaretli olduğundan doğru cevabı aldık. Terminalden md5sum aranabilir doğru yoludur:

$ printf '%s' "Hello" | md5sum 

yeni hat dahil edilmemesi için.

+0

Dosyada bir satırbaşı var mı? – Slava

+0

@Slava Dosya yok. "Merhaba" sadece bir dizedir. Ne demek istediğini açıklayabilir misiniz? –

+0

8b1a9953c4611296a827abf8c47804d7 dizesi Hello – deviantfan

cevap

15

Son bir satırsonu, md5sum programına geçiriyorsunuz, ancak kodunuz için değil.

Sen bash <<< operatör Yeni satır ekler görebilirsiniz:

$ printf '%s' Hello | od -ta 
0000000 H e l l o 
0000005 
$ printf '%s' Hello | md5sum 
8b1a9953c4611296a827abf8c47804d7 - 
Alternatif

, programınızda bir yeni satır içerebilir: Bunu önlemek için

$ od -ta <<<Hello 
0000000 H e l l o nl 
0000006 

, printf kullanmak versiyon:

std::string str("Hello\n"); 
+0

Teşekkürler! Haklısın! –