0

我正在使用 Crypto++ 从给定的密码生成 MD4-Hash。但生成的哈希似乎不正确。我想我在某处滥用了 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”。打印输出为:

结束 3CC942AE509EC070B2548515E00F8CE8

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

db346d691d7acc4dc2625db19f9e3f52

有任何想法吗?

4

2 回答 2

0

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

这应该是:

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

也就是说,hash2,不是hash


编码器2.Put(摘要,sizeof(摘要2));

这应该是:

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

也就是说,digest2,不是digest


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

db346d691d7acc4dc2625db19f9e3f52

是的,这就是我在纠正错别字后使用您发布的代码得到的结果。

于 2014-01-28T03:48:59.030 回答
0

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

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

std::string value;
CryptoPP::Weak1::MD4 hashmd4;
CryptoPP::StringSource (password, true,
  new CryptoPP::HashFilter( hashmd4,
    new CryptoPP::HexEncoder(
      new CryptoPP::StringSink(value)
    )
  )
);
于 2013-08-29T08:25:10.093 回答