首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定文件名,如何使用Adler32获得Crypto++

给定文件名,如何使用Adler32获得Crypto++
EN

Stack Overflow用户
提问于 2009-05-06 01:15:44
回答 2查看 1.6K关注 0票数 1

给定一个“字符串文件名”,如何使用C++ Crypto++库获得C++校验和。我对使用他们的源库系统有点困惑。

下面是执行MD5的代码框架,但我似乎找不到关于Adler32使用的任何示例或教程。

代码语言:javascript
复制
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的东西我想要)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-05-06 06:16:41

如果您遵循此http://www.cryptopp.com/wiki/HashFilter,则必须更改hashAdler32的hashMD5和file_adler32_digest的file_md5_digest

代码语言:javascript
复制
Adler32 hashAdler32;

FileSource( filename.c_str(), 
            true, 
            new HashFilter( hashAdler32, 
            new HexEncoder( new StringSink( file_adler32_digest ) ) ) );

在此之后,file_adler32_digest应该包含所需的散列。

票数 1
EN

Stack Overflow用户

发布于 2015-04-15 20:50:01

。。对使用他们的源库系统有点困惑。

好的。这种特殊的设计是受到Unix管道系统的启发。如果您了解Unix管道以及doata如何通过它,那么您就可以理解Crypto++管道

例如,以下Unix命令:

代码语言:javascript
复制
cat somefile.bin | hexdump

将成为以下Crypto++程序:

代码语言:javascript
复制
FileSource fs("somefile.bin", true /*pumpAll*/, new HexEncoder(new FileSink(cout)));

我有做MD5的代码骨架,但我需要代码.对于Adler32 ..。

正如Ismael向您展示的那样,它非常简单:

代码语言:javascript
复制
Adler32 adler32;
string digest;

FileSource fs(filename.c_str(),  true /*pumpAll*/, 
              new HashFilter(adler32, 
                    new HexEncoder(
                        new StringSink(digest))));

但是这里有一个洞察力:在Crypto++中,数据从资料来源流向。在此期间,它将遇到转换数据的过滤器

上面有两个过滤器:HashFilterHexEncoder。所有过滤器都是从BufferedTransformation继承的,因此它们都可以以一致的方式链接在一起。

Adler32本身不是一个过滤器。但是它是从HashTransformation继承的,而这正是HashFilter所使用的。因此,您可以在任何基于HashFilter的对象中进行交换,这样就可以工作了。

您可以在HashFilter上找到一个基于HashTransformation类引用的对象列表。它们包括所有散列(如MD5、SHA和Whirlpool)、Adler32和CRC32。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/827634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档