Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menulis program penyulitan fail mudah dalam C++?

Bagaimana untuk menulis program penyulitan fail mudah dalam C++?

WBOY
WBOYasal
2023-11-03 15:40:59977semak imbas

Bagaimana untuk menulis program penyulitan fail mudah dalam C++?

Bagaimana untuk menulis program penyulitan fail mudah melalui C++?

Pengenalan:
Dengan perkembangan Internet dan populariti peranti pintar, kepentingan melindungi data peribadi dan maklumat sensitif menjadi semakin penting. Untuk memastikan keselamatan fail, selalunya perlu untuk menyulitkannya. Artikel ini akan memperkenalkan cara menggunakan C++ untuk menulis program penyulitan fail mudah untuk melindungi fail anda daripada capaian yang tidak dibenarkan.

  1. Analisis keperluan:
    Sebelum kami mula menulis program penyulitan fail, kami perlu menjelaskan fungsi dan keperluan asas program. Dalam program mudah ini, kami akan menggunakan algoritma penyulitan simetri untuk menyulitkan dan menyahsulit fail. Keperluan khusus adalah seperti berikut:
  2. Program ini seharusnya boleh menerima input pengguna, termasuk laluan fail yang akan disulitkan dan kunci penyulitan.
  3. Program ini sepatutnya boleh membaca kandungan fail yang akan disulitkan dan menyulitkannya menggunakan kekunci.
  4. Kandungan yang disulitkan hendaklah disimpan ke fail baharu, mengekalkan sambungan fail asal.
  5. Pengguna boleh memilih sama ada untuk menyimpan fail asal, atau memadam fail asal dan menyimpan fail yang disulitkan.
  6. Persekitaran dan persediaan pembangunan:
    Sebelum menulis program C++, kita perlu memastikan bahawa kita mempunyai alatan dan persekitaran berikut:
  7. Penyusun: Adalah disyorkan untuk menggunakan GCC atau MinGW untuk menyusun atur cara C++.
  8. Editor teks: seperti Visual Studio Code, Dev-C++ atau Sublime Text, dsb.
  9. Biasakan diri dengan pengetahuan asas bahasa C++ dan pengetahuan berkaitan pengendalian fail.
  10. Bina program:
    Mula-mula buat fail sumber C++ baharu dan sertakan fail pengepala yang diperlukan:

    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;

Seterusnya, tulis fungsi utama dan laksanakan fungsi program secara beransur-ansur mengikut keperluan dalam analisis keperluan.

3.1 Terima input pengguna:

int main() {
    string filePath;
    string key;
    
    cout << "请输入待加密文件的路径:";
    cin >> filePath;
    cout << "请输入加密密钥:";
    cin >> key;
    // 其它代码...
    return 0;
}

Dalam kod ini, kami menggunakan cin untuk menerima laluan fail dan kunci penyulitan yang dimasukkan oleh pengguna dan menyimpannya ke pembolehubah yang sepadan. cin来接收用户输入的文件路径和加密密钥,并保存到相应的变量中。

3.2 读取待加密文件的内容:

ifstream inputFile(filePath, ios::binary);
if(!inputFile) {
    cout << "无法打开文件:" << filePath << endl;
    return 1;
}

string fileContent((istreambuf_iterator<char>(inputFile)), (istreambuf_iterator<char>()));
inputFile.close();

在这段代码中,我们使用ifstream来打开待加密文件,并检查文件是否成功打开。如果文件无法打开,则输出错误信息并结束程序。

接下来,我们使用istreambuf_iterator来读取文件的内容,并保存到fileContent字符串中。

3.3 加密文件内容:
在加密文件内容之前,我们需要实现一个简单的加密算法。这里我们将使用简单的位操作(例如异或)来实现一个基于密钥的简单加密算法。

string encryptedContent = fileContent;
for(int i=0; i<encryptedContent.size(); i++) {
    encryptedContent[i] ^= key[i % key.size()];
}

在这段代码中,我们遍历fileContent字符串,并与密钥进行异或操作来加密文件内容。

3.4 保存加密后的内容到新文件:

string encryptedFilePath = filePath + ".encrypted";
ofstream outputFile(encryptedFilePath, ios::binary);
if(!outputFile) {
    cout << "无法创建加密文件:" << encryptedFilePath << endl;
    return 1;
}

outputFile.write(encryptedContent.c_str(), encryptedContent.size());
outputFile.close();

在这段代码中,我们使用ofstream来创建一个新的二进制文件,并检查文件是否成功创建。如果文件创建失败,则输出错误信息并结束程序。

接下来,我们使用write

3.2 Baca kandungan fail yang akan disulitkan:

rrreee
Dalam kod ini, kami menggunakan ifstream untuk membuka fail yang akan disulitkan dan menyemak sama ada fail itu berjaya dibuka. Jika fail tidak boleh dibuka, mesej ralat akan dikeluarkan dan program tamat.

    Seterusnya, kami menggunakan istreambuf_iterator untuk membaca kandungan fail dan menyimpannya pada rentetan fileContent.

  1. 3.3 Sulitkan kandungan fail:
  2. Sebelum menyulitkan kandungan fail, kami perlu melaksanakan algoritma penyulitan mudah. Di sini kami akan melaksanakan algoritma penyulitan berasaskan kunci mudah menggunakan operasi bit mudah (seperti XOR).
rrreee

Dalam kod ini, kami mengulangi rentetan fileContent dan XORnya dengan kunci untuk menyulitkan kandungan fail.

3.4 Simpan kandungan yang disulitkan ke fail baharu:

rrreee
    Dalam kod ini, kami menggunakan ofstream untuk mencipta fail binari baharu dan menyemak sama ada fail itu berjaya dibuat. Jika penciptaan fail gagal, mesej ralat dikeluarkan dan program tamat.

  1. Seterusnya, kami menggunakan fungsi write untuk menulis kandungan yang disulitkan ke dalam fail baharu dan menutup fail.
3.5 Padam atau simpan fail asal: 🎜Pengguna boleh memilih sama ada untuk memadamkan fail asal atau menyimpan fail asal dan memadamkan fail yang disulitkan. Mengikut pilihan pengguna, tulis kod yang sepadan untuk melaksanakan fungsi ini. 🎜🎜🎜Uji program: 🎜Selepas selesai menulis kod, kami boleh menjalankan beberapa ujian mudah untuk mengesahkan kefungsian program. 🎜🎜🎜Sebelum ujian, sila pastikan anda telah membuat sandaran fail anda untuk mengelakkan kehilangan fail akibat ujian yang tidak betul. 🎜🎜Sebelum menyusun dan menjalankan atur cara, sila pastikan anda telah menetapkan parameter input yang betul supaya atur cara dapat dilaksanakan dengan betul. 🎜🎜🎜Ringkasan: 🎜Artikel ini memperkenalkan cara menulis program penyulitan fail mudah menggunakan C++. Dengan menganalisis keperluan, menulis kod dan menjalankan ujian mudah, kami boleh melaksanakan program penyulitan fail asas. Walau bagaimanapun, ini hanyalah contoh mudah, jika anda mempunyai keperluan yang lebih tinggi (seperti menggunakan algoritma penyulitan yang lebih selamat), anda boleh mengembangkan dan menambah baik program ini. 🎜🎜

Atas ialah kandungan terperinci Bagaimana untuk menulis program penyulitan fail mudah dalam C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn