Crypto ++ и мусор в конце строки после выполнения расшифровки AES - PullRequest
0 голосов
/ 24 августа 2018

Я интегрирую 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 Кодирование / Декодирование

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

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

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

Вот вывод: enter image description here

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

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

1 Ответ

0 голосов
/ 24 августа 2018

Основываясь на комментариях, я смог выяснить, что находится в конце строки. Я знал, что это связано с заполнением нулями, но из-за того, что был новым в 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());
...