当前位置:首页 > 60秒读懂世界 > 从C#代码看AES加密算法的实现机制

从C#代码看AES加密算法的实现机制

一叶知秋2024-08-04 09:10:5160秒读懂世界12

在C#中,实现AES加密算法通常使用System.Security.Cryptography命名空间中的Aes类。以下是一个简单的示例,展示了如何使用Aes类进行AES加密和解密:

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

class AesEncryptionExample
{
    static void Main()
    {
        string plainText = "Hello, World!";
        byte[] key = Encoding.UTF8.GetBytes("16位长度的密钥");
        byte[] iv = Encoding.UTF8.GetBytes("16位长度的初始向量");

        byte[] encryptedData = Encrypt(plainText, key, iv);
        string decryptedText = Decrypt(encryptedData, key, iv);

        Console.WriteLine("原始文本: " + plainText);
        Console.WriteLine("加密后的数据: " + Convert.ToBase64String(encryptedData));
        Console.WriteLine("解密后的文本: " + decryptedText);
    }

    static byte[] Encrypt(string plainText, byte[] key, byte[] iv)
    {
        using (Aes aes = Aes.Create())
        {
            aes.Key = key;
            aes.IV = iv;

            ICryptoTransform encryptor = aes.CreateEncryptor();

            using (MemoryStream ms = new MemoryStream())
            {
                using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                {
                    byte[] plainData = Encoding.UTF8.GetBytes(plainText);
                    cs.Write(plainData, 0, plainData.Length);
                }

                return ms.ToArray();
            }
        }
    }

    static string Decrypt(byte[] encryptedData, byte[] key, byte[] iv)
    {
        using (Aes aes = Aes.Create())
        {
            aes.Key = key;
            aes.IV = iv;

            ICryptoTransform decryptor = aes.CreateDecryptor();

            using (MemoryStream ms = new MemoryStream(encryptedData))
            {
                using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
                {
                    byte[] decryptedData = new byte[encryptedData.Length];
                    int decryptedDataLength = cs.Read(decryptedData, 0, decryptedData.Length);

                    return Encoding.UTF8.GetString(decryptedData, 0, decryptedDataLength);
                }
            }
        }
    }
}

在这个示例中,我们首先创建了一个Aes对象,并设置了密钥(Key)和初始向量(IV)。然后,我们使用CreateEncryptor方法创建了一个加密器(ICryptoTransform),并使用MemoryStream和CryptoStream类将待加密的数据写入加密器。 我们将加密后的数据从MemoryStream中读取出来。

解密过程与加密过程类似,但是我们使用CreateDecryptor方法创建了一个解密器(ICryptoTransform),并使用MemoryStream和CryptoStream类将加密的数据读入解密器。 我们将解密后的数据从MemoryStream中读取出来。

需要注意的是,密钥和初始向量的长度必须符合AES算法的要求。AES算法支持三种密钥长度:128位、192位和256位。初始向量的长度通常与密钥长度相同。在这个示例中,我们使用了16位长度的密钥和初始向量,这对应于AES-128算法。

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

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

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

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