作为初学者,我一直在尝试用C ++编写一些XOR加密代码
我遇到的问题是,当解密时,只有一半的邮件实际上是正确翻译的
如果有人能告诉我出了什么问题以及如何解决这个问题我会非常感激
我还附加了显示错误的控制台上显示的内容 Qoóß®ó»¥Á╝©®50¤ä┌Ð╬┘ð╝ 非加密[_í®┐┐¡½®╠按任意键继续。 。
我的代码如下;
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
char string[] = "non-encrypted_message";
char key[] = "A";
for (int i = 0; i < sizeof(string); i++)
{
string[i] = string[i] ^ key[i]; //Performing the encryption with XOR operator
cout << string[i]; //Output of encrypted message
}
cout << "\n";
for (int j = 0; j < sizeof(string); j++)
{
string[j] = string[j] ^ key[j];
cout << string[j];
}
cout << "\n";
return 0;
}
答案 0 :(得分:2)
key
的大小只有2(包括终止字符),但是你在循环中对它进行索引,导致它超出界限。要么使它成为单个char
并且不对其进行索引,要么确保该数组足够大。我建议使用std::string
或std::array
或std::vector
,好的调试器会为您进行检查。
答案 1 :(得分:1)
将密钥声明为char,不要在其上使用索引。
char key = 'A';
...
string[i] = string[i] ^ key;