我正在使用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
有什么想法吗?
答案 0 :(得分:0)
好的,我自己找到了解决方案。它不像我上面发布的那样工作。
这里是正确的代码,对其他人可能有用:
std::string value;
CryptoPP::Weak1::MD4 hashmd4;
CryptoPP::StringSource (password, true,
new CryptoPP::HashFilter( hashmd4,
new CryptoPP::HexEncoder(
new CryptoPP::StringSink(value)
)
)
);
答案 1 :(得分:0)
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哈希生成器测试的预期值是:
db346d691d7acc4dc2625db19f9e3f52
是的,这就是我在拼写错误后使用你发布的代码得到的结果。