使用Crypto++进行MD4哈希会导致错误的哈希

MD4 hashing with Crypto++ results in wrong hash?

本文关键字:错误 哈希 哈希会 Crypto++ 进行 MD4 使用      更新时间:2023-10-16

我使用Crypto++从给定密码生成MD4哈希。但是生成的哈希似乎不正确。我想我在某个地方滥用了CryptoPP函数。

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"。打印输出为:

结束3cc942ae09ec070b2548515e00f8ce8

一些MD4哈希生成器测试的预期值为:

数据库346d691d7acc4dc2625数据库19f9e3f52

有什么想法吗?

好吧,我自己找到了解决方案。它不像我上面发布的那样工作。

这里是正确的代码,它可能对其他人有用:

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

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

这应该是:

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

也就是说,hash2,而不是hash


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

这应该是:

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

也就是说,digest2,而不是digest


一些MD4哈希生成器测试的预期值为:

数据库346d691d7acc4dc2625数据库19f9e3f52

是的,这就是我使用你在拼写错误修复后发布的代码得到的。