Base64编码失败

时间:2013-09-29 21:32:35

标签: c++ crypto++

我正在使用Crypto ++来满足其他加密需求;但是,我还需要将二进制信息存储为ascii文本。为此,我将Crypto ++的base 64过滤器的示例合成到下面的代码块中。

bool saveData(const unsigned char * buffer, size_t length)
{

    int lenb64 = (ceil(length / 3.0) * 4) + 1;
    unsigned char * temp_str = (unsigned char *)malloc(lenb64);

    CryptoPP::ArraySource as(buffer, length, new CryptoPP::Base64Encoder(
        new CryptoPP::ArraySink(temp_str, lenb64)));

    //do something with temp_str.
    free(temp_str); //Then free the tempstr.
    //Return true if do something worked, else false.
}

我遇到的问题是,在此操作之后,temp_str仍然充满了垃圾。我环顾四周,除了上面所做的以外,找不到任何可以做任何其他事情的例子。有什么我想念的吗?

1 个答案:

答案 0 :(得分:2)

CryptoPP::ArraySourceCryptoPP::StringSourcetypedefStringSource相关构造函数的签名是:

StringSource(const byte *string,
             size_t length,
             bool pumpAll,
             BufferedTransformation *attachment=NULL);

所以你的第三个参数是指向CryptoPP::Base64Encoder的指针被强制转换为bool,第四个参数是默认的NULL

要解决此问题,请执行以下操作:

CryptoPP::ArraySource(buffer, length, true,
    new CryptoPP::Base64Encoder(
        new CryptoPP::ArraySink(temp_str, lenb64)));