阅读量:0
在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的管理等。此外,加密后的文件将无法直接读取,需要使用相应的解密算法进行解密。