在C#中,可以使用System.IO.Directory
类来遍历文件夹,并使用System.IO.File
类来读取和写入文件。为了加密文件夹,可以选择使用对称加密算法(如AES)或非对称加密算法(如RSA)。
以下是一个使用AES加密文件夹的示例代码:
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的管理等。此外,加密后的文件将无法直接读取,需要使用相应的解密算法进行解密。