C# 使用Aes对数据进行加密

在C#中,使用AES(高级加密标准)对数据进行加密是一种常见的做法。以下是一个使用AES加密和解密数据的简单示例。这个示例将使用System.Security.Cryptography命名空间中的类。

步骤 1: 创建AES密钥和IV(初始化向量)

AES加密需要一个密钥(Key)和一个初始化向量(IV)。密钥是加密和解密过程中使用的秘密信息,而IV则是一个随机值,用于确保即使对相同的明文进行多次加密,也会产生不同的密文。

步骤 2: 加密数据

使用AES加密数据时,需要创建一个Aes对象,并设置其密钥和IV。然后,使用CreateEncryptor方法创建一个加密器,并用它来加密数据。

步骤 3: 解密数据

解密是加密的逆过程。你需要再次创建一个Aes对象,并使用相同的密钥和IV。然后,使用CreateDecryptor方法创建一个解密器,并用它来解密数据。

示例代码

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

class Program
{
    static void Main()
    {
        string original = "Hello, World!";
        byte[] encrypted;
        byte[] decrypted;

        // 使用AES加密
        using (Aes myAes = Aes.Create())
        {
            // 加密密钥和IV(通常应该从安全的地方获取)
            byte[] key = Encoding.UTF8.GetBytes("1234567890123456"); // 16 bytes key for AES-128
            byte[] iv = myAes.IV; // 随机生成IV

            // 加密
            ICryptoTransform encryptor = myAes.CreateEncryptor(key, iv);
            using (MemoryStream msEncrypt = new MemoryStream())
            {
                using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                {
                    using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                    {
                        swEncrypt.Write(original);
                    }
                    encrypted = msEncrypt.ToArray();
                }
            }

            // 解密
            ICryptoTransform decryptor = myAes.CreateDecryptor(key, iv);
            using (MemoryStream msDecrypt = new MemoryStream(encrypted))
            {
                using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                    {
                        decrypted = Encoding.UTF8.GetBytes(srDecrypt.ReadToEnd());
                    }
                }
            }

            Console.WriteLine($"Original:   {original}");
            Console.WriteLine($"Encrypted:  {Convert.ToBase64String(encrypted)}");
            Console.WriteLine($"Decrypted:  {Encoding.UTF8.GetString(decrypted)}");
        }
    }
}

注意

  1. 密钥管理:在这个示例中,密钥是硬编码的,这在实际应用中是不安全的。密钥应存储在安全的位置,并尽可能避免硬编码。

  2. IV的管理:IV不需要保密,但它需要随机生成并与密文一起存储或传输,以便解密时能正确恢复数据。

  3. 加密和解密模式:AES支持多种模式和填充方式。在上面的示例中,我们使用了默认的模式(CBC)和填充(PKCS#7)。

  4. 性能:对于大量数据的加密和解密,应考虑使用更高效的内存管理和流处理技术。

  5. 异常处理:在生产环境中,应该添加适当的异常处理逻辑来处理加密/解密过程中可能出现的错误。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AitTech

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值