Вопрос

Я использую Cryptopp, чтобы кодировать строку «ABC», проблема в том, что кодированная строка Base64 всегда имеет следующую «0x0a»? Вот мой код:

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

Строка «ABC» должна быть закодирована на «ywjj», но результат ywjj n, ( n == 0x0a), а длина - 5.

Изменение исходной строки не помогает, любая строка будет зашифрована с помощью следа n, почему это так? Спасибо

Это было полезно?

Решение

От Base64encoder Docs, подпись конструктора

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

Таким образом, вы по умолчанию получаете разрывы строки в своей закодированной строке. Чтобы избежать этого, просто сделайте:

CryptoPP::StringSource ss(
    in,
    true, 
    new CryptoPP::Base64Encoder(
        new CryptoPP::StringSink(encoded),
        false
    )
);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top