【发布时间】:2021-01-04 22:34:50
【问题描述】:
C++,我希望能够“加密”和解密 .txt 文件,使用逐个字符的 XOR 和密钥 “1”。
我能够成功加密和解密“Hello World”,但较大的文本文件似乎有一些 XOR 映射到 Ascii 控制字符,导致解密无法完全解密整个文件。
Hello.txt 包含“Hello World”,output.txt 为空。
我如何异或:
std::ifstream infile("Hello.txt");
std::ofstream outfile("output.txt");
std::string key = "1";
std::string contents((std::istreambuf_iterator<char>(infile)),
std::istreambuf_iterator<char>()); //copies file data to contents
infile.close();
int k = 0;
for(std::size_t i = 0; i<contents.length();i++) //character by character
{
contents[i] = contents[i] ^ key[k]; //"encrypt"
k = (k+1) % key.length(); //iterate through key (for longer keys)
outfile <<contents[i]; //write to output.txt
}
outfile.close();
相同的代码用于解密 output.txt,但需要对 infile 和 outfile 进行硬编码更改。例如。 infile("output.txt"), outfile("text.txt");
如果文件包含字符“+”,则密钥为“1”,“+”将加密为“”(→),解密将截断“+”之后的所有内容,包括在内。
我认为某些值 XOR 到 Ascii 控制 .txt 文件无法处理的字符(Windows 10)是否正确?
是否可以通过我使用 .txt 文件保存密文的方法正确“加密”和解密?
如果可能,我如何将 Ascii 控制字符存储到 .txt 文件中?
我应该改变什么来更好地处理密文中的 Ascii 控制字符?
【问题讨论】:
-
在两种情况下都只以二进制而不是文本的形式打开加密文件(
std::fstreamctor 的第二个参数) -
我会调查并回复,谢谢。
-
工作就像一个魅力!谢谢!
标签: c++ encryption text ascii xor