Pergunta

Estou usando o Cryptopp para codificar uma string "ABC", o problema é que a string base64 codificada sempre tem um '0x0a' à direita? Aqui está o meu código:

#include <iostream>
#include <string>

using namespace std;

#include "crypto/base64.h"
using namespace CryptoPP;

int main() {
string in("abc");

string encoded;

CryptoPP::StringSource ss(
    in,
    true, 
    new CryptoPP::Base64Encoder(
        new CryptoPP::StringSink(encoded)
    )
);

cout << encoded.length() << endl;// outputs 5, should be 4
cout << encoded;
}

A string "ABC" deve ser codificada para "Ywjj", mas o resultado é ywjj n, ( n == 0x0a) e o comprimento é 5.

Alterando a sequência de origem não ajuda, qualquer string será criptografada com uma trilha n por que isso? Obrigado

Foi útil?

Solução

De Base64Encoder Docs, a assinatura do construtor é

Base64Encoder (BufferedTransformation *attachment=NULL,
               bool insertLineBreaks=true,
               int maxLineLength=72)

Então você obtém quebras de linha por padrão na sua sequência codificada. Para evitar isso, basta fazer:

CryptoPP::StringSource ss(
    in,
    true, 
    new CryptoPP::Base64Encoder(
        new CryptoPP::StringSink(encoded),
        false
    )
);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top