Frage

Ich verwende Cryptopp, um eine Zeichenfolge "ABC" zu codieren. Das Problem ist, dass die codierte Basis64 -String immer eine nachfolgende '0x0a' hat. Hier ist mein Code:

#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;
}

Die Zeichenfolge "ABC" sollte an "ywjj" codiert werden, aber das Ergebnis ist YWJJ n, ( n == 0x0a) und die Länge 5.

Das Ändern der Quellzeichenfolge hilft nicht, eine Zeichenfolge wird mit einem nachverfolgenden n verschlüsselt. Warum ist das so? Vielen Dank

War es hilfreich?

Lösung

Von dem Basis64Coder -Dokumente, Die Signatur des Konstruktors ist

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

Sie erhalten also standardmäßig Zeilenpausen in Ihrer codierten Zeichenfolge. Um dies zu vermeiden, tun Sie einfach:

CryptoPP::StringSource ss(
    in,
    true, 
    new CryptoPP::Base64Encoder(
        new CryptoPP::StringSink(encoded),
        false
    )
);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top