这似乎是一个简单的问题,但是加密++似乎是设计成一种时髦,“尽可能钝”的方式,所以我想知道......
如何从CryptoPP :: Base64Decode对象中获取二进制数据?假设我不想将其写入文件,或者以其他方式对其进行编码,我如何才能获得实际的二进制数据?
编辑:想出来;不确定如何关闭/删除它,任何人?我现在在这里做什么是合适的?
答案 0 :(得分:1)
没关系,明白了。作为参考,我想获得BufferedTransformation子类的MaxRetrievable和Get方法。
答案 1 :(得分:0)
这似乎是一个简单的问题,但加密++似乎是 设计时髦,“尽可能钝”的方式,所以我想知道......
如果您不熟悉Crypto ++设计,这不是一个简单的问题。实际上有两种设计在起作用。
首先是经典的更新/决赛。它使用Put
和Get
以及朋友在Crypto ++中实现。
第二种是pipleline设计。这就是数据从源流到接收器的地方,你会看到它,例如:
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
,依此类推。最后一个过滤器将在接收器上调用Put
。更准确地说,源和过滤器将调用Put2
,但这是一个实现细节。
如果没有接收器:
Source -> Filter -> NULL
然后Filter将在内部缓冲转换后的数据。您可以使用Get
,GetWord16
,GetWord32
,MaxRetrievable
,AnyRetrievable
等从过滤器或接收器中提取数据。
Put
,Get
,MaxRetrievable
和朋友是BufferedTransformation
界面的一部分,这是所有过滤器和接收器实现的接口(实际上不需要来源实现它)。如果某个类没有提供Put
,Get
和朋友,那么它不是过滤器或接收器。该课程的文档位于BufferedTransformation Class Reference。
还有很多内容,包括阻塞和抽取块中的数据,但对于Base64过滤器或对象来说并不是真的需要它。上例中的pumpAll
表示一次性推送所有数据。