为什么我只能解密输入流的前两个字符?

时间:2014-05-11 17:12:31

标签: c++ string encryption xor

描述:
我正在用c ++代码编写/探索xor加密/解密以获得乐趣。我之前就这两个主题提出了问题:Very long string input to xor encryption programString input xor encryption program

我已经开发了下面的代码,它将提示用户输入一个字符串,并且应该使用代码中的键对字符串进行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的加密字符串。如果我将更多字符放入程序中,我将只返回前2个原始字符。这是为什么?

请回复明确的解释和/或示例。感谢

1 个答案:

答案 0 :(得分:0)

感谢用户 - DNT建议我从中删除11:
    char key [11] =&#34; ABCDEFGHIJ&#34;并让编译器搞清楚。 该建议纠正了这个问题。对于任何可能需要它的人来说,最终代码如下所示,因为这只是一个探索/有趣的项目。

#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;
}