c#怎么加密文件夾

c#
小億
87
2024-10-27 00:33:37
欄目: 編程語言

在C#中,可以使用System.IO.Directory類來遍歷文件夾,并使用System.IO.File類來讀取和寫入文件。為了加密文件夾,可以選擇使用對(duì)稱加密算法(如AES)或非對(duì)稱加密算法(如RSA)。

以下是一個(gè)使用AES加密文件夾的示例代碼:

  1. 首先,需要生成一個(gè)密鑰和一個(gè)初始化向量(IV),并將它們保存到文件中。可以使用System.Security.Cryptography命名空間中的類來實(shí)現(xiàn)這一點(diǎn)。
using System.Security.Cryptography;
using System.IO;

// 生成密鑰和IV
byte[] key = new byte[32]; // AES密鑰長(zhǎng)度為32字節(jié)
byte[] iv = new byte[16]; // AES IV長(zhǎng)度為16字節(jié)
using (Aes aes = Aes.Create())
{
    aes.Key = key;
    aes.IV = iv;

    // 保存密鑰和IV到文件中
    using (FileStream fs = new FileStream("key.bin", FileMode.Create))
    {
        aes.SaveKey(fs);
    }

    using (FileStream fs = new FileStream("iv.bin", FileMode.Create))
    {
        fs.Write(iv, 0, iv.Length);
    }
}
  1. 接下來,需要遍歷文件夾中的所有文件,并將它們加密。可以使用遞歸方法來實(shí)現(xiàn)這一點(diǎn)。
using System.IO;

// 加密文件夾中的文件
void EncryptFilesInFolder(string folderPath)
{
    DirectoryInfo di = new DirectoryInfo(folderPath);
    FileInfo[] fis = di.GetFiles();

    foreach (FileInfo fi in fis)
    {
        string filePath = fi.FullName;
        string encryptedFilePath = Path.Combine(folderPath, "encrypted_" + fi.Name);

        // 加密文件
        EncryptFile(filePath, encryptedFilePath);
    }

    DirectoryInfo[] dis = di.GetDirectories();

    foreach (DirectoryInfo di in dis)
    {
        string folderPath = di.FullName;
        string encryptedFolderPath = Path.Combine(folderPath, "encrypted_" + di.Name);

        // 遞歸加密子文件夾
        EncryptFilesInFolder(folderPath);
    }
}

// 加密單個(gè)文件
void EncryptFile(string inputFilePath, string outputFilePath)
{
    using (Aes aes = Aes.Create())
    {
        aes.Key = File.ReadAllBytes("key.bin");
        aes.IV = File.ReadAllBytes("iv.bin");

        using (ICryptoTransform encryptor = aes.CreateEncryptor())
        {
            using (FileStream fs = new FileStream(inputFilePath, FileMode.Open))
            {
                using (CryptoStream cs = new CryptoStream(fs, encryptor, CryptoStreamMode.Read))
                {
                    using (FileStream fsOut = new FileStream(outputFilePath, FileMode.Create))
                    {
                        cs.CopyTo(fsOut);
                    }
                }
            }
        }
    }
}
  1. 最后,可以調(diào)用EncryptFilesInFolder方法來加密整個(gè)文件夾。
string folderPath = @"C:\path\to\folder";
EncryptFilesInFolder(folderPath);

請(qǐng)注意,這只是一個(gè)簡(jiǎn)單的示例,實(shí)際應(yīng)用中可能需要考慮更多的因素,如錯(cuò)誤處理、異常處理、密鑰和IV的管理等。此外,加密后的文件將無法直接讀取,需要使用相應(yīng)的解密算法進(jìn)行解密。

0