C#加密解密文件


在C#中,文件加密和解密可以通过多种方式实现,但一种常见且有效的方法是使用AES(高级加密标准)算法。下面是一个简单的示例,展示了如何使用AES来加密和解密文件。

首先,你需要引入必要的命名空间:


using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

然后,你可以创建两个方法:一个用于加密文件,另一个用于解密文件。这里我假设你有一个密钥(Key)和初始化向量(IV),它们用于加密和解密过程。

### 加密文件


public static void EncryptFile(string inputFile, string outputFile, byte[] Key, byte[] IV)
{
    using (Aes aesAlg = Aes.Create())
    {
        aesAlg.Key = Key;
        aesAlg.IV = IV;

        ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

        using (FileStream fsCrypt = new FileStream(outputFile, FileMode.Create))
        {
            using (CryptoStream csEncrypt = new CryptoStream(fsCrypt, encryptor, CryptoStreamMode.Write))
            {
                using (FileStream fsIn = new FileStream(inputFile, FileMode.Open))
                {
                    int data;
                    while ((data = fsIn.ReadByte()) != -1)
                    {
                        csEncrypt.WriteByte((byte)data);
                    }
                }
            }
        }
    }
}

### 解密文件


public static void DecryptFile(string inputFile, string outputFile, byte[] Key, byte[] IV)
{
    using (Aes aesAlg = Aes.Create())
    {
        aesAlg.Key = Key;
        aesAlg.IV = IV;

        ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);

        using (FileStream fsCrypt = new FileStream(inputFile, FileMode.Open))
        {
            using (CryptoStream csDecrypt = new CryptoStream(fsCrypt, decryptor, CryptoStreamMode.Read))
            {
                using (FileStream fsOut = new FileStream(outputFile, FileMode.Create))
                {
                    int data;
                    while ((data = csDecrypt.ReadByte()) != -1)
                    {
                        fsOut.WriteByte((byte)data);
                    }
                }
            }
        }
    }
}

请注意,为了运行这些代码,你需要有合适的`Key`和`IV`。这些通常应该是随机生成的,并且需要安全地存储起来以便在解密时使用。

**重要提示**:在实际应用中,你应该使用安全的方式来生成和存储密钥(Key)和初始化向量(IV),而不是硬编码在代码中,因为这样做会大大降低加密的安全性。

此外,上述代码示例仅用于演示目的,并未包含错误处理或优化性能的代码。在生产环境中,你应该添加适当的错误处理逻辑,并根据需要优化代码性能。