为什么我只能对输入流的前两个字符进行xor解密
Why can I only xor decrypt the first two characters of my input stream?
描述:
我正在编写/探索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;
}
相关文章:
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 在函数中连接两个字符,并在 C++ 中返回输出
- 舍入 QDecDouble 值,精度最多为两个字符
- 计算两个字符序列
- 在c++中连接两个字符
- 有没有办法我可以从 istringstream 中读取两个字符
- 如何查看两个字符变量是否相等
- 使用位于 C 字符串中的两个字符*获取子字符串
- 比较两个字符的问题
- 如何修复密码条目,它一次输入两个字符
- 字符串构造函数将两个字符* 放入另一个 std::string 在 C++14 中有效,但不适用于 C++17
- 将两个字符数组相互添加
- 在 c++ 中添加两个字符
- 如何删除QString的前两个字符
- 如何使用两个字符来控制 C++ 程序的流程
- 如何将两个字符或字符串数组附加到一个数组中
- 如何从两个字符之间的文件中提取整数
- 删除两个字符之间的文本
- std::setw() 将特殊字符视为两个字符
- 比较两个字符*是否相等