C++ 如何散列大于16kB的文本文件?

C++ 如何散列大于16kB的文本文件?,c++,hash,cryptography,crypto++,C++,Hash,Cryptography,Crypto++,我正在使用Crypto++库进行散列。如何散列大于16kB(字符串大小)的文件?我想要至少1Mb的散列文件 我得到的错误是当文本大于16kB时: 错误C2026:字符串太大,尾随字符被截断 以下是我正在使用的代码: std::string hash; CryptoPP::SHA512 sha; CryptoPP::StringSource ss(source, true, new CryptoPP::HashFilter(sha,

我正在使用Crypto++库进行散列。如何散列大于16kB(字符串大小)的文件?我想要至少1Mb的散列文件

我得到的错误是当文本大于16kB时:

错误C2026:字符串太大,尾随字符被截断
以下是我正在使用的代码:

std::string hash;
CryptoPP::SHA512 sha;

CryptoPP::StringSource ss(source, true,
                          new CryptoPP::HashFilter(sha,
                              new CryptoPP::HexEncoder(
                                  new CryptoPP::StringSink(hash))));

cout << "SHA-512 hash: " << hash << endl;
std::字符串散列;
CryptoPP::SHA512-sha;
CryptoPP::StringSource ss(源,真,
新的CryptoPP::HashFilter(sha,
新的CryptoPP::HexEncoder(
新的CryptoPP::StringSink(散列));
库特
当我使用Crypto++库进行散列时,如何散列大于16kB(字符串大小)的文件?我想要至少1Mb的散列文件

你应该做两件事中的任何一件。首先,使用a而不是a。比如:

string s1, s2, s3, s4;
SHA1 sha1; SHA224 sha224; SHA256 sha256; SHA512 sha512;

HashFilter f1(sha1, new HexEncoder(new StringSink(s1)));
HashFilter f2(sha224, new HexEncoder(new StringSink(s2)));
HashFilter f3(sha256, new HexEncoder(new StringSink(s3)));
HashFilter f4(sha512, new HexEncoder(new StringSink(s4)));

ChannelSwitch cs;
cs.AddDefaultRoute(f1);
cs.AddDefaultRoute(f2);
cs.AddDefaultRoute(f3);
cs.AddDefaultRoute(f4);

FileSource fs("filename.xxx", true /*pumpAll*/, new Redirector(cs));

cout << Message: " << message << endl;
cout << "SHA-1: " << s1 << endl;
cout << "SHA-224: " << s2 << endl;
cout << "SHA-256: " << s3 << endl;
cout << "SHA-512: " << s4 << endl;
字符串s1、s2、s3、s4;
SHA1-SHA1;SHA224 SHA224;SHA256 SHA256;SHA512-SHA512;
HashFilter f1(sha1,新的六角编码器(新的StringSink(s1));
HashFilter f2(sha224,新的HexEncoder(新的StringSink(s2));
HashFilter f3(sha256,新的HexEncoder(新的StringSink(s3));
HashFilter f4(sha512,新的HexEncoder(新的StringSink(s4));
信道开关;
cs.AddDefaultRoute(f1);
cs.AddDefaultRoute(f2);
cs.AddDefaultRoute(f3);
cs.AddDefaultRoute(f4);
FileSource fs(“filename.xxx”,true/*pumpAll*/,新重定向器(cs));

你在哪里遇到问题了?当我想要散列较大的文本然后是16kB时:错误C2026:字符串太大,尾随字符被截断这难道不是编译器错误,它告诉你不能使用那么长的字符串文字吗?在这种情况下,您可以简单地以另一种方式构建字符串,例如通过读取文件。