C++ 为什么我只能对输入流的前两个字符进行异或解密?

C++ 为什么我只能对输入流的前两个字符进行异或解密?,c++,string,encryption,xor,C++,String,Encryption,Xor,说明: 我在C++代码中编写/探索XOR加密/解密,以获取乐趣。我已经就这两个主题提出了以前的问题:和 我开发了下面的代码,它将提示用户输入一个字符串,并且应该用代码中的键对字符串进行异或运算。这种加密的工作方式是,我应该能够输入一个字符串并获得一个加密字符串。如果我通过相同的函数运行相同的加密字符串,我应该会得到原始字符串。请参阅下面的工作代码 #include <iostream> #include <string> using namespace std; int

说明:
我在C++代码中编写/探索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;
}
#包括
#包括
使用名称空间std;
内部主(空)
{
而(1)
{
字符串mystr;

cout感谢用户–DNT建议我将11从中删除:
char键[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;
}
#包括
#包括
使用名称空间std;
内部主(空)
{
而(1)
{
字符串mystr;

cout
char键[11]=“ABCDEFGHIJK”
应该抛出一个错误!数组末尾只能包含10个字符和一个空字符。输入字符串中的第三个字符是什么?您的右边有两个字符长,原因是因为我有一些不同的东西,是11个,但我不想在internet上共享我的密码,所以我更改了它。XOR关于可读字符can如果其中一个输入字符恰好与键中的一个字符相同,则会产生零字节。我会在此处使用std::vector,然后以十六进制形式打印出来,这样即使零字节也是可见的。另一个问题是,您可能最终会使用低ascii字符,如backspace、cr、lf、tab等,这些字符可能(也可能不会)弄乱终端输出-在显示时,退格可能会导致覆盖上一个字符。否则,除了键[]数组的大小之外,您的代码似乎正常。为什么不将其设为char键[]=“ABCDEFGHIJ”;并让编译器处理大小。您的键包含10个字符(忽略尾随的null)因此,您应该使用
i%10
在表达式
key[i%10]