我正在制作一个基于 XOR 的加密/解密器,它的工作原理是这样的。您有一个明文字符(例如 3)和一个用户密钥(例如 5)。以位形式写入:
3 = 00000011
5 = 00000101
现在,如果我们进行异或运算,我们得到 6:
6 = 00000110
这可以通过说 6 XOR 5 来反转,即 3。
所以我做了这个程序。但它确实有问题,它不能正确翻译文本,而且它会在文件末尾添加很多字符,具体取决于您使用的键。
using namespace std;
int main(int argc, char *argv[])
{
char buffer[5001];
ifstream fin("a.txt", ifstream::in);
ofstream fout("b.txt");
int key;
char znak;
// console
cout << "Key: ";
cin >> key;
fin.get(znak);
while(!fin.eof() && znak != ' ')
{
fin.get(buffer, sizeof(buffer));
}
for(int i = 0; i < sizeof(buffer); i++)
{
fout << function(key, buffer[i]);
}
cout << "done" << endl;
cin.get();
return 0;
}
char function(int key,char input)
{
return input ^ key;
}
为什么程序不能正确翻译文本?为什么它会在文件末尾添加字符?