在现代软件开发中,C#文件加密是保护用户数据安全的重要手段。尤其当处理大型文件时,一次性加载整个文件到内存不仅效率低下,还可能导致程序崩溃。本文将手把手教你如何使用分块加密处理技术,在C#中安全、高效地加密任意大小的文件——即使你是编程小白,也能轻松上手!

想象一下,你要加密一个5GB的视频文件。如果一次性读入内存,你的程序可能因内存不足而崩溃。而C#大文件加密通过分块(例如每次处理1MB)的方式,可以显著降低内存占用,同时保持高性能和稳定性。
我们将使用 .NET 内置的 Aes 加密算法(高级加密标准),它安全、高效,并且被广泛采用。确保你的项目目标框架为 .NET Core 3.1 或更高版本(或 .NET 5+)。
下面是一个完整的 C# 分块加密/解密工具类。我们将逐段解释其工作原理。
using System;using System.IO;using System.Security.Cryptography;using System.Text;public class FileEncryptor{ // 每次处理的数据块大小(建议为 1MB) private const int BufferSize = 1024 * 1024; // 1 MB /// /// 使用 AES 对文件进行分块加密 /// public static void EncryptFile(string inputFilePath, string outputFilePath, string password) { using var aes = Aes.Create(); byte[] salt = new byte[16]; using (var rng = RandomNumberGenerator.Create()) rng.GetBytes(salt); // 从密码派生密钥和 IV var pdb = new Rfc2898DeriveBytes(password, salt, 10000, HashAlgorithmName.SHA256); aes.Key = pdb.GetBytes(32); // 256-bit key aes.IV = pdb.GetBytes(16); // 128-bit IV using var inputFile = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read); using var outputFile = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write); // 先写入 Salt(用于后续解密) outputFile.Write(salt, 0, salt.Length); using var cryptoStream = new CryptoStream(outputFile, aes.CreateEncryptor(), CryptoStreamMode.Write); byte[] buffer = new byte[BufferSize]; int bytesRead; while ((bytesRead = inputFile.Read(buffer, 0, buffer.Length)) > 0) { cryptoStream.Write(buffer, 0, bytesRead); } cryptoStream.FlushFinalBlock(); } /// /// 使用 AES 对文件进行分块解密 /// public static void DecryptFile(string inputFilePath, string outputFilePath, string password) { byte[] salt = new byte[16]; using var inputFile = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read); // 读取前16字节作为 Salt if (inputFile.Read(salt, 0, salt.Length) != 16) throw new InvalidOperationException("Invalid encrypted file."); using var aes = Aes.Create(); var pdb = new Rfc2898DeriveBytes(password, salt, 10000, HashAlgorithmName.SHA256); aes.Key = pdb.GetBytes(32); aes.IV = pdb.GetBytes(16); using var outputFile = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write); using var cryptoStream = new CryptoStream(inputFile, aes.CreateDecryptor(), CryptoStreamMode.Read); byte[] buffer = new byte[BufferSize]; int bytesRead; while ((bytesRead = cryptoStream.Read(buffer, 0, buffer.Length)) > 0) { outputFile.Write(buffer, 0, bytesRead); } }}while 循环每次读取最多1MB数据,避免内存溢出,适用于安全文件处理。只需调用两个静态方法:
// 加密FileEncryptor.EncryptFile(@"C:\data\video.mp4", @"C:\data\video.mp4.enc", "MySecurePassword123!");// 解密FileEncryptor.DecryptFile(@"C:\data\video.mp4.enc", @"C:\data\video_decrypted.mp4", "MySecurePassword123!");- 密码应足够复杂(建议包含大小写字母、数字和符号)
- 不要将密码硬编码在源代码中
- 对于生产环境,考虑使用更安全的密钥管理方案(如 Azure Key Vault)
通过本文,你已经掌握了在 C# 中实现分块加密处理的核心技术。这种方法不仅适用于小文件,更能高效、安全地处理 GB 级别的大文件,是构建可靠安全文件处理系统的关键技能。赶紧动手试试吧!
本文由主机测评网于2025-12-22发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251211241.html