在C#中,可以使用System.IO.Directory
类来遍历文件夹,并使用System.IO.File
类来读取和写入文件。为了加密文件夹,可以选择使用对称加密算法(如AES)或非对称加密算法(如RSA)。
以下是一个使用AES加密文件夹的示例代码:
- 首先,需要生成一个密钥和一个初始化向量(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); } }
- 接下来,需要遍历文件夹中的所有文件,并将它们加密。可以使用递归方法来实现这一点。
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);
}
}
}
}
}
}
- 最后,可以调用
EncryptFilesInFolder
方法来加密整个文件夹。
string folderPath = @"C:\path\to\folder"; EncryptFilesInFolder(folderPath);
请注意,这只是一个简单的示例,实际应用中可能需要考虑更多的因素,如错误处理、异常处理、密钥和IV的管理等。此外,加密后的文件将无法直接读取,需要使用相应的解密算法进行解密。