Question

J'utilise CryptOPP pour coder une chaîne "ABC", le problème est que la chaîne Base64 codée a toujours un "0x0a". Voici mon 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;
}

La chaîne "ABC" doit être codée en "ywjj", mais le résultat est ywjj n, ( n == 0x0a), et la longueur est 5.

La modification de la chaîne source n'aide pas, une chaîne sera cryptée avec un suivi n Pourquoi est-ce? Merci

Était-ce utile?

La solution

Du Docs de base64encoder, la signature du constructeur est

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

Vous obtenez donc des pauses de ligne par défaut dans votre chaîne codée. Pour éviter cela, faites-le:

CryptoPP::StringSource ss(
    in,
    true, 
    new CryptoPP::Base64Encoder(
        new CryptoPP::StringSink(encoded),
        false
    )
);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top