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());