【问题描述】
写一个加密程序,对文件1.txt进行加密。它从输入流中读入一个密钥,并将文件密文输出。采用下面的简单加密算法:
1)读入密钥的key是一个字符串;
2)明文中字符c的密文为c^key[i];(^异或运算)
3)循环使用key中的各个字符,直至处理完全部明文。如果key为空,则不作加密
4)解密时,用同一个key重新加密密文,就可以得到明文。
【输入形式】
从标准输入流中读入一个密钥串,使用其对当前目录下的文件1.txt进行加密。
【输出形式】
将文件密文输出到文件2.txt
【输入样例】
输入密钥为:
1234
1.txt文件内容为
test
【输出样例】
输出密文到2.txt文件中。2.txt文件内容为
EW@@
【样例说明】
从标准输入中读入一个密钥对文件1.txt加密,并将文件密文输出到2.txt文件中。
提示:可将得到的密文文件2.txt拷贝到1.txt文件中,并用原密钥对该文件再次加密,若得到的密文文件与原始文件相同,则说明程序算法正确。
- 对文件进行操作的方法如下:
- 包含头文件。(#include<fstream>)
- 定义一个流对象,并将其与特定的对象联合。
- (ifstream inputfile("1.text"); ofstream outputfile ("2.text");)
https://blog.csdn.net/weixin_43256263/article/details/127502981
-
#include <iostream> #include <fstream> using namespace std; void encryptFile(const string& key) { ifstream inputFile("1.txt"); ofstream outputFile("2.txt"); if (!inputFile.is_open()) { cout << "无法打开文件1.txt" << endl; return; } if (!outputFile.is_open()) { cout << "无法打开文件2.txt" << endl; return; } char ch;//便于解密/加密单个字符单个字符转换 int keyindex = 0; while (inputFile.get(ch)) { if (!key.empty()) //如果key非空 { ch = ch ^ key[keyindex]; keyindex = (keyindex + 1) % key.length(); } outputFile << ch; } inputFile.close(); outputFile.close(); } int main() { string key; cin >> key; encryptFile(key); return 0; }