当前位置:首页 > 60秒读懂世界 > AES加密原理及其在C#中的实现细节

AES加密原理及其在C#中的实现细节

一叶知秋2024-07-29 10:46:0860秒读懂世界15

AES(Advanced Encryption Standard)是一种对称加密算法,它使用相同的密钥进行加密和解密

AES加密原理:

  1. 替换:将明文分组的每个字节替换为一个新的字节,这是通过使用替换盒(Substitution box)来实现的,它将每个字节映射到另一个字节。

  2. 混淆:将明文分组的字节重新排列,这是通过使用字节置换(Byte Substitution)来实现的。

  3. 扩展:将明文分组扩展为更大的维度,以便与密钥进行异或操作。

  4. 循环:将上述步骤重复进行多轮加密,每轮使用不同的密钥。

  5. 异或:将加密后的分组与密钥进行异或操作,得到最终的加密结果。

在C#中实现AES加密:

以下是一个简单的C#示例,展示了如何使用AES加密和解密数据:

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

class AESExample
{
    static void Main()
    {
        string plainText = "Hello, world!";
        string key = "16位长度的密钥"; // 注意:密钥长度必须是16、24或32字节

        byte[] encryptedData = Encrypt(Encoding.UTF8.GetBytes(plainText), Encoding.UTF8.GetBytes(key));
        byte[] decryptedData = Decrypt(encryptedData, Encoding.UTF8.GetBytes(key));

        Console.WriteLine("原始数据:" + plainText);
        Console.WriteLine("加密后数据:" + Convert.ToBase64String(encryptedData));
        Console.WriteLine("解密后数据:" + Encoding.UTF8.GetString(decryptedData));
    }

    static byte[] Encrypt(byte[] data, byte[] key)
    {
        using (Aes aes = Aes.Create())
        {
            aes.Key = key;
            aes.GenerateIV(); // 生成随机初始化向量

            using (ICryptoTransform encryptor = aes.CreateEncryptor())
            {
                byte[] encryptedData = encryptor.TransformFinalBlock(data, 0, data.Length);
                byte[] iv = aes.IV; // 获取初始化向量

                // 将初始化向量附加到加密数据前面
                byte[] result = new byte[iv.Length + encryptedData.Length];
                Array.Copy(iv, 0, result, 0, iv.Length);
                Array.Copy(encryptedData, 0, result, iv.Length, encryptedData.Length);

                return result;
            }
        }
    }

    static byte[] Decrypt(byte[] encryptedData, byte[] key)
    {
        byte[] iv = new byte[16]; // 提取初始化向量
        Array.Copy(encryptedData, 0, iv, 0, iv.Length);

        using (Aes aes = Aes.Create())
        {
            aes.Key = key;
            aes.IV = iv;

            using (ICryptoTransform decryptor = aes.CreateDecryptor())
            {
                byte[] data = decryptor.TransformFinalBlock(encryptedData, iv.Length, encryptedData.Length - iv.Length);
                return data;
            }
        }
    }
}

在这个示例中,我们使用了.NET Framework中的System.Security.Cryptography.Aes类来实现AES加密和解密。 我们创建了一个Aes对象,并设置了密钥。然后,我们使用CreateEncryptor方法创建一个加密器,并使用TransformFinalBlock方法对数据进行加密。同样,我们使用CreateDecryptor方法创建一个解密器,并使用TransformFinalBlock方法对数据进行解密。

注意:在实际应用中,密钥的长度必须是16、24或32字节,并且应该是随机生成的,以确保加密的安全性。 为了提高安全性,可以使用不同的初始化向量(IV)进行加密和解密。在这个示例中,我们生成了一个随机的IV,并将其附加到加密数据的前面,以便在解密时可以提取出来。

扫描二维码推送至手机访问。

版权声明:本站部分文章来自AI创作、互联网收集,请查看免责申明

本文链接:https://www.yyzq.team/post/368166.html

新工具上线:
分享给朋友: