Реализовать XOR шифрование для wstring на C++

Требуется алгоритм XOR шифрования для типа wstring C++. Я пытался выполнить следующий код, но он выдавал неверный результат:

std::wstring XOR(std::wstring text, std::wstring key)
{
    std::wstring decodedText;

    for (int i = 0; i < text.size(); i++)
    {
        decodedText += text[i] ^ key[i % key.size()];
    }

    return decodedText;
}

Буду рад любой помощи.


Ответы (1 шт):

Автор решения: MS.music9

Я немного изменил вашу функцию:

#include <string>
#include <iostream>


std::wstring XOR(std::wstring decodedText, std::wstring key){
    for (int i = 0; i < decodedText.size(); i++) {
        #ifdef _DEBUG
          std::wcout << decodedText[i] << "\t" << key[i % key.size()] << "\t" << (decodedText[i] ^ key[i % key.size()]) << std::endl;
        #endif

        decodedText[i] ^= key[i % key.size()];
    }
    
    return decodedText; 
}


int main(int argc, char *argv[]){
    const wchar_t* s = L"my text =]";
    const wchar_t* key = L"super key";
    std::wcout << s << std::endl;
    std::wcout << key << "\n\n";
    std::wstring res = XOR(s, key);
    std::wcout << res << std::endl;
    std::wcout << (int)res.size();
}

Судя по размеру выходимой строки, все вроде нормально. Как вы сказали в комментариях, проблема в кодировке консоли. А я и забыл об этом

→ Ссылка