gpt4 book ai didi

visual-c++ - Crypto++ SHA1 函数

转载 作者:行者123 更新时间:2023-12-01 23:22:43 24 4
gpt4 key购买 nike

我无法弄清楚我的函数出了什么问题 - 它导致返回时出现断点。

std::string generateHash(std::string source)
{
CryptoPP::SHA1 hash;
byte digest[CryptoPP::SHA1::DIGESTSIZE];
hash.CalculateDigest(digest, (const byte*)source.c_str(), source.size());
std::string output;
CryptoPP::HexEncoder encoder;
CryptoPP::StringSink test = CryptoPP::StringSink(output);
encoder.Attach((CryptoPP::BufferedTransformation*)&CryptoPP::StringSink(output));
encoder.Put(digest, sizeof(digest));
encoder.MessageEnd();
return output; // here
}

最佳答案

encoder.Attach((CryptoPP::BufferedTransformation*)&CryptoPP::StringSink(output));

在这一行中,CryptoPP::StringSink(output) 是一个临时对象。在此调用之后,CryptoPP::StringSink(output) 不再存在。因此,如果您尝试跟踪其地址(encoder.Attachencoder.Put),您将得到未定义的行为。 (就像你永远不应该返回局部变量的地址一样)

我的引用代码:

 std::string generateHash(std::string source)
{
CryptoPP::SHA1 hash;
byte digest[CryptoPP::SHA1::DIGESTSIZE];
hash.CalculateDigest(digest, (const byte*)source.c_str(), source.size());
std::string output;
CryptoPP::HexEncoder encoder;
CryptoPP::StringSink test = CryptoPP::StringSink(output);
encoder.Attach(new CryptoPP::StringSink(output));
encoder.Put(digest, sizeof(digest));
encoder.MessageEnd();
return output;
}

关于visual-c++ - Crypto++ SHA1 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23420683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com