2013-08-29 2 views
0

Я использую Crypto ++ для генерации MD4-Hash из заданного пароля. Но созданный хэш не кажется правильным. Я думаю, что я неправильно использую функции CryptoPP.MD4 хэширование с Crypto ++ приводит к неправильному хэшу?

CryptoPP::Weak1::MD4 hash2; 
byte digest2[CryptoPP::Weak1::MD4::DIGESTSIZE]; 
hash.CalculateDigest(digest2, (byte*)password, strlen(password)); 
CryptoPP::HexEncoder encoder2; 
std::string output2; 
encoder2.Attach(new CryptoPP::StringSink(output2)); 
encoder2.Put(digest,sizeof(digest2)); 
encoder2.MessageEnd(); 
printf("END %s \n", output2.c_str()); 

Мой переменный пароль содержит значение «тест». Напечатанный выход:

END 3CC942AE509EC070B2548515E00F8CE8

Ожидаемое значение, испытанные некоторыми генераторами MD4 Hash, является:

db346d691d7acc4dc2625db19f9e3f52

Любые идеи?

ответ

0

Хорошо, я нашел решение самостоятельно. Это не работает так, как я писал выше.

Вот правильный код, это может быть полезным для кого-то еще:

std::string value; 
CryptoPP::Weak1::MD4 hashmd4; 
CryptoPP::StringSource (password, true, 
    new CryptoPP::HashFilter(hashmd4, 
    new CryptoPP::HexEncoder(
     new CryptoPP::StringSink(value) 
    ) 
) 
); 
0

hash.CalculateDigest (digest2, (байт *) пароль, STRLEN (пароль));

Это должно быть:

hash2.CalculateDigest(digest2, (byte*)password, strlen(password)); 

То есть, hash2, не hash.


encoder2.Put (дайджест, SizeOf (digest2));

Это должно быть:

encoder2.Put(digest2,sizeof(digest2)); 

То есть, digest2, не digest.


Ожидаемое значение, испытанные некоторыми генераторами MD4 Hash, является:

db346d691d7acc4dc2625db19f9e3f52

Да, это то, что я получаю, используя код, который вы размещены после опечатки были исправлены.

Смежные вопросы