温馨提示×

c#怎么加密文件夹

c#
小亿
88
2024-10-27 00:33:37
栏目: 编程语言

在C#中,可以使用System.IO.Directory类来遍历文件夹,并使用System.IO.File类来读取和写入文件。为了加密文件夹,可以选择使用对称加密算法(如AES)或非对称加密算法(如RSA)。

以下是一个使用AES加密文件夹的示例代码:

  1. 首先,需要生成一个密钥和一个初始化向量(IV),并将它们保存到文件中。可以使用System.Security.Cryptography命名空间中的类来实现这一点。
using System.Security.Cryptography;
using System.IO;

// 生成密钥和IV
byte[] key = new byte[32]; // AES密钥长度为32字节
byte[] iv = new byte[16]; // AES IV长度为16字节
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. 接下来,需要遍历文件夹中的所有文件,并将它们加密。可以使用递归方法来实现这一点。
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);
    }
}

// 加密单个文件
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. 最后,可以调用EncryptFilesInFolder方法来加密整个文件夹。
string folderPath = @"C:\path\to\folder";
EncryptFilesInFolder(folderPath);

请注意,这只是一个简单的示例,实际应用中可能需要考虑更多的因素,如错误处理、异常处理、密钥和IV的管理等。此外,加密后的文件将无法直接读取,需要使用相应的解密算法进行解密。

0