HashVerificationFilter 和 "message hash or MAC not valid" 异常
HashVerificationFilter and "message hash or MAC not valid" exception
在 Crpto++ 中,可以轻松地使用管道对输入进行哈希处理。
std::string out;
CryptoPP::SHA256 sha;
CryptoPP::StringSource ss(input,true,
new CryptoPP::HashFilter(sha,
new CryptoPP::HexEncoder(
new CryptoPP::StringSink(out))));
现在为了验证给定消息 x 产生相同的散列输出,我想使用 HashVerificationFilter。我试过了,但没有用。有人知道正确的语法吗?
const int flags = CryptoPP::HashVerificationFilter::THROW_EXCEPTION | CryptoPP::HashVerificationFilter::HASH_AT_END;
CryptoPP::SHA256 sha;
try
{
CryptoPP::StringSource ss(input + out, true,
new CryptoPP::HashVerificationFilter(sha, NULL , flags));
}
catch(const CryptoPP::Exception& e)
{
std::cerr << e.what() << std::endl;
exit(1);
}
我得到输出:
HashVerificationFilter: message hash or MAC not valid
std::string out;
SHA256 sha;
StringSource ss(input,true,
new HashFilter(sha,
new HexEncoder(
new StringSink(out)
)));
您 HexEncode 您的哈希值。您需要在将其传递给过滤器之前对其进行解码:
StringSource ss(input + out, true,
new HashVerificationFilter(sha, NULL , flags)
);
或者,删除编码过滤器:
std::string out;
SHA256 sha;
StringSource ss(input,true,
new HashFilter(sha,
new StringSink(out)
));
在 Crpto++ 中,可以轻松地使用管道对输入进行哈希处理。
std::string out;
CryptoPP::SHA256 sha;
CryptoPP::StringSource ss(input,true,
new CryptoPP::HashFilter(sha,
new CryptoPP::HexEncoder(
new CryptoPP::StringSink(out))));
现在为了验证给定消息 x 产生相同的散列输出,我想使用 HashVerificationFilter。我试过了,但没有用。有人知道正确的语法吗?
const int flags = CryptoPP::HashVerificationFilter::THROW_EXCEPTION | CryptoPP::HashVerificationFilter::HASH_AT_END;
CryptoPP::SHA256 sha;
try
{
CryptoPP::StringSource ss(input + out, true,
new CryptoPP::HashVerificationFilter(sha, NULL , flags));
}
catch(const CryptoPP::Exception& e)
{
std::cerr << e.what() << std::endl;
exit(1);
}
我得到输出:
HashVerificationFilter: message hash or MAC not valid
std::string out; SHA256 sha; StringSource ss(input,true, new HashFilter(sha, new HexEncoder( new StringSink(out) )));
您 HexEncode 您的哈希值。您需要在将其传递给过滤器之前对其进行解码:
StringSource ss(input + out, true, new HashVerificationFilter(sha, NULL , flags) );
或者,删除编码过滤器:
std::string out; SHA256 sha; StringSource ss(input,true, new HashFilter(sha, new StringSink(out) ));