2013-08-29 48 views
0

我正在使用Crypto ++從給定密碼生成MD4-Hash。但生成的哈希似乎並不正確。我認爲我在某處濫用CryptoPP功能。使用Crypto ++的MD4散列會導致散列錯誤?

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

我的可變密碼包含值「test」。打印的輸出是:

END 3CC942AE509EC070B2548515E00F8CE8

的預期值,通過一些MD4哈希發生器測試是:

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,(BYTE *)密碼,strlen的(密碼));

這應該是:

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

也就是說,hash2,不hash


encoder2.Put(消化,的sizeof(digest2));

這應該是:

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

也就是說,digest2,不digest


的期望值,有些MD4哈希發電機進行測試,方法是:

db346d691d7acc4dc2625db19f9e3f52

沒錯,這就是我開始使用您發佈的錯別字固定後的代碼。