使用c++ 写一个加密程序,对文件1txt进行加密。它从输入流中读入一个密钥,并将文件密文输出。采用下面的简单加密算法: 1)读入密钥的key是一个字符串; 2)明文中字符c的密文为c^key[i]; 3)循环使用key中的各个字符,直至处理完全部明文。如果key为空,则不作加密 4)解密时,用同一个key重新加密密文,就可以得到明文。
时间: 2024-02-13 14:07:57 浏览: 62
C++实现文件加密算法
好的,以下是使用C++实现的代码示例:
```c++
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void encrypt_file(string input_file, string output_file, string key) {
ifstream ifs(input_file);
if (!ifs.is_open()) {
cerr << "无法打开输入文件!" << endl;
return;
}
string plaintext((istreambuf_iterator<char>(ifs)), istreambuf_iterator<char>());
ifs.close();
if (key.empty()) {
// 如果key为空,则不作加密,直接输出明文
ofstream ofs(output_file);
if (!ofs.is_open()) {
cerr << "无法打开输出文件!" << endl;
return;
}
ofs << plaintext;
ofs.close();
cout << "加密成功!" << endl;
return;
}
// 对明文进行加密
string ciphertext;
int key_len = key.length();
for (int i = 0; i < plaintext.length(); i++) {
// 循环使用key中的各个字符,直至处理完全部明文
char key_char = key[i % key_len];
char c = plaintext[i] ^ key_char;
ciphertext += c;
}
ofstream ofs(output_file);
if (!ofs.is_open()) {
cerr << "无法打开输出文件!" << endl;
return;
}
ofs << ciphertext;
ofs.close();
cout << "加密成功!" << endl;
}
void decrypt_file(string input_file, string output_file, string key) {
ifstream ifs(input_file);
if (!ifs.is_open()) {
cerr << "无法打开输入文件!" << endl;
return;
}
string ciphertext((istreambuf_iterator<char>(ifs)), istreambuf_iterator<char>());
ifs.close();
if (key.empty()) {
// 如果key为空,则不作解密,直接输出密文
ofstream ofs(output_file);
if (!ofs.is_open()) {
cerr << "无法打开输出文件!" << endl;
return;
}
ofs << ciphertext;
ofs.close();
cout << "解密成功!" << endl;
return;
}
// 对密文进行解密
string plaintext;
int key_len = key.length();
for (int i = 0; i < ciphertext.length(); i++) {
// 循环使用key中的各个字符,直至处理完全部密文
char key_char = key[i % key_len];
char c = ciphertext[i] ^ key_char;
plaintext += c;
}
ofstream ofs(output_file);
if (!ofs.is_open()) {
cerr << "无法打开输出文件!" << endl;
return;
}
ofs << plaintext;
ofs.close();
cout << "解密成功!" << endl;
}
int main() {
string input_file = "1.txt";
string encrypted_file = "1_encrypted.txt";
string decrypted_file = "1_decrypted.txt";
string key = "secret_key";
encrypt_file(input_file, encrypted_file, key);
decrypt_file(encrypted_file, decrypted_file, key);
return 0;
}
```
你可以调用 `encrypt_file()` 函数来加密文件,调用 `decrypt_file()` 函数来解密文件。这两个函数都需要传入三个参数:输入文件名、输出文件名和密钥。如果密钥为空,则不作加密或解密。
阅读全文