Base64Decode:如何获取数据

时间:2011-05-09 23:16:08

标签: c++ crypto++

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

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

编辑:想出来;不确定如何关闭/删除它,任何人?我现在在这里做什么是合适的?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

  

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

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

首先是经典的更新/决赛。它使用PutGet以及朋友在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将在内部缓冲转换后的数据。您可以使用GetGetWord16GetWord32MaxRetrievableAnyRetrievable等从过滤器或接收器中提取数据。

PutGetMaxRetrievable和朋友是BufferedTransformation界面的一部分,这是所有过滤器和接收器实现的接口(实际上不需要来源实现它)。如果某个类没有提供PutGet和朋友,那么它不是过滤器或接收器。该课程的文档位于BufferedTransformation Class Reference

还有很多内容,包括阻塞和抽取块中的数据,但对于Base64过滤器或对象来说并不是真的需要它。上例中的pumpAll表示一次性推送所有数据。