为什么我只能对输入流的前两个字符进行xor解密

Why can I only xor decrypt the first two characters of my input stream?

本文关键字:两个 字符 解密 xor 输入流 为什么      更新时间:2023-10-16

描述:
我正在编写/探索c++代码中的xor加密/解密,以获得乐趣。我之前问过关于这两个主题的问题:超长字符串输入到xor加密程序和字符串输入到xor加密程序。

我已经开发了下面的代码,它将提示用户输入字符串,并且应该用代码中的键对字符串进行异或。这种加密的工作方式是,我应该能够输入一个字符串并获得一个加密的字符串。如果我通过相同的函数运行相同的加密字符串,我应该会得到原始字符串。请参阅下面的工作代码。

#include <iostream>
#include <string>
using namespace std;
int main (void)
{
while (1)
{
string mystr;
cout << "What's the phrase to be Encrypted? ";
char key[11]="ABCDEFGHIJ";  //The Encryption Key, for now its generic
getline(cin, mystr);
string result;
for (int i=0; i<mystr.size(); i++) {
    result.push_back(mystr[i] ^ key[i%11]);
    cout << result[i];
}
cout << "n";

}
return 0;
}

问题:
我只能把一个长度为2个字符的字符串放入程序中,并且可以让长度为2的加密字符串返回。如果我在程序中放入更多的字符,我只会取回前两个原始字符。为什么会这样?

请给出明确的解释和/或示例。感谢

感谢用户-DNT的建议,我将11从中删除:
char key[11]="ABCDEFGHIJ",让编译器来解决它。那个建议纠正了问题。以下是最终代码,供任何可能需要它的人使用,因为这只是一个探索性/有趣的项目。

#include <iostream>
#include <string>
using namespace std;
int main (void)
{
while (1)
{
string mystr;
cout << "What's the phrase to be Encrypted? ";
char key[]="ABCDEFGHIJ";  //The Encryption Key, for now its generic
getline(cin, mystr);
string result;
for (int i=0; i<mystr.size(); i++) {
    result.push_back(mystr[i] ^ key[i%11]);
    cout << result[i];
}
cout << "n";

}
return 0;
}