📜  使用C++加密和解密文本文件

📅  最后修改于: 2022-05-13 01:54:46.522000             🧑  作者: Mango

使用C++加密和解密文本文件

密码学中的加密是将纯文本或一条信息转换为密文或只能由接收信息的接收者解码的文本的过程。用于加密过程的算法称为密码。它有助于保护消费者信息、电子邮件和其他敏感数据免遭未经授权的访问,并保护通信网络的安全。目前有很多选项可供选择,并找到满足我们要求的最安全的算法。

解密:解密是将无意义的消息(密文)转换为其原始形式(明文)的过程。它的工作原理是应用与用于加密数据的算法相反的转换算法。需要相同的密钥才能将信息解密回其正常形式。

密码学类型:密码学有两种类型:

  • 对称密码术:它是一种加密系统,其中消息的发送者和接收者使用单个公共密钥来加密和解密消息。对称密钥系统更快、更简单,但发送方和接收方必须以某种方式安全地交换密钥。最流行的对称密钥密码系统是数据加密系统 (DES)。
  • 非对称密码学:在此系统下,使用一对密钥来加密和解密信息。公钥用于加密,私钥用于解密。公钥和私钥是不同的。即使每个人都知道公钥,预期的接收者也只能解码它,因为只有他知道私钥。

在本文中,对称密码用于加密和解密数据。

方法:在进入实现部分之前,让我们详细讨论一下方法:



  • encdec定义了两个成员函数:encrypt() 和decrypt()。要加密的文件名是类的成员变量。
  • encrypt()函数用于处理输入文件的加密。文件处理代码包含在 encrypt()函数,用于读取文件和写入文件。生成一个名为encrypt.txt 的新加密文件,其中包含所有加密数据。加密文件使用用户输入的密钥进行加密。
  • 解密()函数用于读取加密文件并解密数据并生成新文件decrypt.txt。要解密文件,需要向用户请求密钥。如果输入了正确的密钥,则文件成功解密。
  • 输入流 用于从文件中读取和输出流fout 用于写入文件。

下面是上述方法的实现:

C++
// C++ program for the above approach
  
#include 
#include 
using namespace std;
  
// encdec class with encrypt() and
// decrypt() member functions
class encdec {
    int key;
  
    // File name to be encrypt
    string fle = "geeksforgeeks.txt";
    char c;
  
public:
    void encrypt();
    void decrypt();
};
  
// Definition of encryption function
void encdec::encrypt()
{
    // Key to be used for encryption
    cout << "key: ";
    cin >> key;
  
    // Input stream
    fstream fin, fout;
  
    // Open input file
    // ios::binary- reading file
    // character by character
    fin.open(fle, fstream::in);
    fout.open("encrypt.txt", fstream::out);
  
    // Reading original file till
    // end of file
    while (fin >> noskipws >> c) {
        int temp = (c + key);
  
        // Write temp as char in
        // output file
        fout << (char)temp;
    }
  
    // Closing both files
    fin.close();
    fout.close();
}
  
// Definition of decryption function
void encdec::decrypt()
{
    cout << "key: ";
    cin >> key;
    fstream fin;
    fstream fout;
    fin.open("encrypt.txt", fstream::in);
    fout.open("decrypt.txt", fstream::out);
  
    while (fin >> noskipws >> c) {
  
        // Remove the key from the
        // character
        int temp = (c - key);
        fout << (char)temp;
    }
  
    fin.close();
    fout.close();
}
  
// Driver Code
int main()
{
    encdec enc;
    char c;
    cout << "\n";
    cout << "Enter Your Choice : -> \n";
    cout << "1. encrypt \n";
    cout << "2. decrypt \n";
    cin >> c;
    cin.ignore();
  
    switch (c) {
    case '1': {
        enc.encrypt();
        break;
    }
    case '2': {
        enc.decrypt();
        break;
    }
    }
}


输出:

想要从精选的视频和练习题中学习,请查看C++ 基础课程,从基础到高级 C++ 和C++ STL 课程,了解语言和 STL。要完成从学习语言到 DS Algo 等的准备工作,请参阅完整的面试准备课程