Реализовать 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();
}
Судя по размеру выходимой строки, все вроде нормально. Как вы сказали в комментариях, проблема в кодировке консоли. А я и забыл об этом