Pregunta

Estoy usando CryptoPP para codificar una cadena "ABC", el problema es que la cadena Base64 codificada siempre tiene un '0x0a' de fin de semana. Aquí está mi 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;
}

La cadena "ABC" debe codificarse a "ywjj", pero el resultado es ywjj n, ( n == 0x0a), y la longitud es 5.

Cambiar la cadena de origen no ayuda, cualquier cadena se encriptará con un final n ¿Por qué es eso? Gracias

¿Fue útil?

Solución

Desde el Base64Coder Docs, la firma del constructor es

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

Por lo tanto, obtienes descansos de línea de forma predeterminada en tu cadena codificada. Para evitar esto, solo haz:

CryptoPP::StringSource ss(
    in,
    true, 
    new CryptoPP::Base64Encoder(
        new CryptoPP::StringSink(encoded),
        false
    )
);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top