Crypto++ и мусор в конце строки после выполнения расшифровки AES

Я интегрирую Crypto++ в свое приложение C++, и пока он работает, почти.

Шифрование работает отлично. Вывод соответствует тому, что я ожидал. Однако, когда я иду расшифровывать, он добавляет квадратные символы в конце.

Вот моя функция шифрования:

string Encryption::EncryptAES(const string &text, const string &key) {
    string cipher;

    AES::Encryption aes((byte *) key.c_str(), 32);

    ECB_Mode_ExternalCipher::Encryption ecb(aes);

    StreamTransformationFilter encrypt(ecb, new StringSink(cipher), StreamTransformationFilter::ZEROS_PADDING);

    encrypt.Put(reinterpret_cast<const unsigned char *>( text.c_str()), text.length() + 1);
    encrypt.MessageEnd();
    return Base64::Encode(cipher);
}

Вот моя функция расшифровки:

string Encryption::DecryptAES(const string &text, const string &key) {
    string decoded;
    Base64::Decode(text, decoded);
    string decrypted;

    AES::Decryption aes((byte *) key.c_str(), 32);
    ECB_Mode_ExternalCipher::Decryption ecb(aes);

    StreamTransformationFilter decrypt(ecb, new StringSink(decrypted), StreamTransformationFilter::ZEROS_PADDING);

    decrypt.Put(reinterpret_cast<const unsigned char *>( decoded.c_str()), decoded.length());
    decrypt.MessageEnd();

    return decrypted;
}

Я использую следующее для Base64 Encode / Decode: Base64 Encode / Decode

Вот код, который я вызываю для шифрования / дешифрования:

string encryptedPass = EncryptAES(value, key);
cout << "Encrypted Text: " << encryptedPass << endl;

string decryptedPass = DecryptAES(encryptedPass, key);
cout << "Decryped Text: " << decryptedPass << endl;

Вот вывод: введите описание изображения здесь

Когда я копирую и вставляю вывод в Notepad++, это куча пробелов. У меня есть ощущение, что это имеет дело с ZEROS_PADDING, но мне нужно, чтобы это соответствовало другим нашим приложениям, которые мы используем.

Я не уверен, как на самом деле попытаться это исправить. Мысли?

1 ответ

Решение

На основании комментариев я смог выяснить, что находится в конце строки. Я знал, что это связано с заполнением нулями, но из-за того, что был новичком в C++, я не до конца понимал, что происходит.

Я запустил это, чтобы получить значение ascii для персонажа:

for(char& c : s){
    cout << "Char:" << (int)c << endl;
}

Это привело к следующему в конце строки:

Char:0
Char:0
Char:0
Char:0
Char:0
Char:0

И согласно таблице ASCII это NUL

Итак, простое решение для этого заключается в следующем:

std::string(value.c_str());
Другие вопросы по тегам