1

这似乎是一个简单的问题,但 crypto++ 似乎是以一种时髦的“尽可能钝”的方式设计的,所以我想知道......

如何从 CryptoPP::Base64Decode 对象中获取二进制数据?假设我不想将其写入文件或以其他方式对其进行编码,我该如何获取实际的二进制数据?

编辑:想通了;不知道如何关闭/删除它,有人吗?我现在在这里做什么合适?

4

2 回答 2

1

没关系,想通了。作为参考,我想获取 BufferedTransformation 子类的 MaxRetrievable 和 Get 方法。

于 2011-05-09T23:25:39.707 回答
0

这似乎是一个简单的问题,但 crypto++ 似乎是以一种时髦的“尽可能钝”的方式设计的,所以我想知道......

如果您不熟悉 Crypto++ 设计,这不是一个简单的问题。实际上有两种设计在起作用。

首先是经典的更新/决赛。Put它与和Get朋友一起在 Crypto++ 中实现。

二是流水线设计。这就是数据从源流向接收器的地方,您会看到它,例如:

FileSource fs( "Hello World", true /*pumpAll*/
    new HexEncoder( e,
        new FileSink( "encoded.txt" )     
); // FileSource

管道等效于 Unix 命令:

echo "Hello World" | base64 >> encoded.txt

管道概括为:

Source -> Filter -> Filter -> ... -> Filter -> Sink

在内部,Source 将调用Put第一个过滤器;第一个过滤器将转换数据并调用Put第二个过滤器,依此类推。最后一个过滤器将调用PutSink。更准确地说,Source 和 Filters 将调用Put2,但这是一个实现细节。

如果没有 Sink:

Source -> Filter -> NULL

然后过滤器将在内部缓冲转换后的数据。您可以使用Get, GetWord16, GetWord32, MaxRetrievable,AnyRetrievable等从过滤器或接收器中提取数据。

Put, Get,MaxRetrievable和 friends 是BufferedTransformation接口的一部分,这是所有过滤器和接收器都实现的接口(实际上不需要源来实现它)。如果一个类不提供Put,Get和朋友,那么它不是过滤器或接收器。该类的文档位于BufferedTransformation Class Reference

它还有很多其他功能,包括以块为单位阻塞和抽取数据,但 Base64 过滤器或对象并不真正需要它。上pumpAll例中的意思是一次性推送所有数据。

于 2013-10-04T04:40:58.320 回答