سؤال

أنا أستخدم 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 مستندات, ، توقيع المنشئ

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