文件的加密较为简单,当然也可以修改它的加密方式等,供大家参考
cpp
#include<string>
#include<fstream>
class ReaderFile
{
public:
string Read(const string& filename)
{
cout << "读取文件,获取明文"<<endl;
std::ifstream ifile;//输入流对象
std::string src;//明文,读取内容放入src中
char ch;
ifile.open(filename);
if (!ifile.is_open())
{
cout << "文件不存在" << endl;
return src;
}
while (!ifile.eof())//fstream / ifstream / ofstream 类中的 成员函数eof()用来检测是否到达文件尾,如果到达文件尾返回非0值,否则返回0
{
ifile.get(ch);//读取字符
src += ch;
}
ifile.close();
return src;
}
};
class WriterFile
{
public:
void Write(const string& filename, const string& ciphertext)//将密文写入文件中
{
cout << "保存密文,写入文件" << endl;
ofstream ofile;
ofile.open(filename);
if (!ofile.is_open())
{
cout << "文件不存在" << endl;
return;
}
for (auto ch : ciphertext)//范围for
{
ofile.put(ch);
}
ofile.close();
}
};
class Encryptor
{
public:
string Encrypt(const string& plaintext)
{
cout << "数据加密,将明文转换为密文" << endl;
std::string es;
for (auto ch : plaintext)
{
char c = ch;
if (islower(c))
{
c = (c + 5) % 26 + 'a';//加密方法
es += c;
}
}
return es;
}
};
//组合
class EncryptFacade//加密器
{
private:
ReaderFile reader;
Encryptor encrypt;
WriterFile writer;
public:
EncryptFacade() {}
void FileEncrypt(const string& des, const string& src)//把源文件加密写入目标文件
{
std::string s = reader.Read(src);
if (s.empty())
{
cout << "加密失败!" << endl;
return;
}
std::string e = encrypt.Encrypt(s);
writer.Write(des, e);
}
};
void main()
{
EncryptFacade ef;
ef.FileEncrypt("des.txt", "src.txt");
}