首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Crypto++“T形”-style过滤器

Crypto++“T形”-style过滤器
EN

Stack Overflow用户
提问于 2012-05-24 15:21:47
回答 1查看 182关注 0票数 2

我正在处理基于某些条件的数据流。

从输入管道读取数据,对其进行处理,然后通过以FileSink结尾的Crypto++ CBC_Mode<AES>过滤器向下推送数据。

现在,我想要“窥探”在加密和文件存储之间流动的数据,计算校验和。出于性能原因,我希望在流式传输的同时执行此操作,重新打开输出文件并计算散列和后,这不符合我的需要。

在我看来,要想让它发挥作用,缺少的是某种形式的"tee“过滤器。将数据链拆分为两个新链,一个用于存储到文件,另一个用于哈希计算。

Crypto++中有这样的功能吗?我可以自己实现这样的过滤器吗?如果是这样的话,有没有一些关于自定义Crypto++过滤器需要什么的指导方针或示例?有没有其他方法可以即时计算校验和?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-04 13:01:32

据我所知,

所缺少的是某种形式的"tee“过滤器。..。Crypto++中有这样的功能吗?

是的,它叫做ChannelSwitch。下面是来自Crypto++ wiki page on ChannelSwitch的代码,它遵循了魏代在他的测试文件中使用这个类的过程。

代码语言:javascript
复制
MD5 hashMD5;
HashFilter filterMD5(hashMD5);

SHA1 hashSHA1;
HashFilter filterSHA1(hashSHA1);

std::auto_ptr<ChannelSwitch> channel( new ChannelSwitch );

channel->AddDefaultRoute(filterMD5);
channel->AddDefaultRoute(filterSHA1);

StringSource ss( "abcdefghijklmnopqrstuvwxyz", true, channel.release());

string digest;
HexEncoder encoder( new StringSink( digest ), true /* uppercase */ ); 

filterMD5.TransferTo( encoder );
cout << filterMD5.AlgorithmName() << ": " << digest << endl;
digest.erase();

filterSHA1.TransferTo( encoder );
cout << filterSHA1.AlgorithmName() << ": " << digest << endl;
digest.erase();

下面是上面示例的输出:

代码语言:javascript
复制
$ ./cryptopp-test.exe
MD5: C3FCD3D76192E4007DFB496CCA67E13B
SHA-1: 32D10C7B8CF96570CA04CE37F2A19D84240D3A89

下面是另一个使用截然不同的接收器的例子,它可能更容易理解:

代码语言:javascript
复制
byte data[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
string e1, e2, e3;

HexEncoder r1(new StringSink(e1));
Base32Encoder r2(new StringSink(e2));
Base64Encoder r3(new StringSink(e3));

ChannelSwitch chsw;
chsw.AddDefaultRoute(r1);
chsw.AddDefaultRoute(r2);
chsw.AddDefaultRoute(r3);

chsw.Put(data, sizeof(data));
chsw.MessageEnd();

cout << e1 << endl;
cout << e2 << endl;
cout << e3 << endl;

下面是示例的输出:

代码语言:javascript
复制
$ ./cryptopp-test.exe
0102030405060708090A
AEBAGBAFA2DSSCIK
AQIDBAUGBwgJCg==
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10732926

复制
相关文章

相似问题

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