给定一个“字符串文件名”,如何使用C++ Crypto++库获得C++校验和。我对使用他们的源库系统有点困惑。
下面是执行MD5的代码框架,但我似乎找不到关于Adler32使用的任何示例或教程。
string filename = "/tmp/data.txt"
string file_adler32_digest;
string file_md5_digest;
MD5 hashMD5;
FileSource fs( filename.c_str(),
true,
new HashFilter( hashMD5,
new HexEncoder( new StringSink( file_md5_digest ) ) ) );
/* Confusion begins here */
//how do I do the adler32 ?
/* Confusion ends here */
cout << file_adler32_digest << endl
<< file_md5_digest << endl;好的示例和示例代码,这里为所有的http://www.cryptopp.com/wiki/Category:Sample Crypto++ (除了Adler32的东西我想要)
发布于 2009-05-06 06:16:41
如果您遵循此http://www.cryptopp.com/wiki/HashFilter,则必须更改hashAdler32的hashMD5和file_adler32_digest的file_md5_digest
Adler32 hashAdler32;
FileSource( filename.c_str(),
true,
new HashFilter( hashAdler32,
new HexEncoder( new StringSink( file_adler32_digest ) ) ) );在此之后,file_adler32_digest应该包含所需的散列。
发布于 2015-04-15 20:50:01
。。对使用他们的源库系统有点困惑。
好的。这种特殊的设计是受到Unix管道系统的启发。如果您了解Unix管道以及doata如何通过它,那么您就可以理解Crypto++管道。
例如,以下Unix命令:
cat somefile.bin | hexdump将成为以下Crypto++程序:
FileSource fs("somefile.bin", true /*pumpAll*/, new HexEncoder(new FileSink(cout)));我有做MD5的代码骨架,但我需要代码.对于Adler32 ..。
正如Ismael向您展示的那样,它非常简单:
Adler32 adler32;
string digest;
FileSource fs(filename.c_str(), true /*pumpAll*/,
new HashFilter(adler32,
new HexEncoder(
new StringSink(digest))));但是这里有一个洞察力:在Crypto++中,数据从资料来源流向汇。在此期间,它将遇到转换数据的过滤器。
上面有两个过滤器:HashFilter和HexEncoder。所有过滤器都是从BufferedTransformation继承的,因此它们都可以以一致的方式链接在一起。
Adler32本身不是一个过滤器。但是它是从HashTransformation继承的,而这正是HashFilter所使用的。因此,您可以在任何基于HashFilter的对象中进行交换,这样就可以工作了。
您可以在HashFilter上找到一个基于HashTransformation类引用的对象列表。它们包括所有散列(如MD5、SHA和Whirlpool)、Adler32和CRC32。
https://stackoverflow.com/questions/827634
复制相似问题