使用C#实现AES加密与解密的示例

 更新时间:2024年12月01日 08:30:25   作者:数据的世界01  
在现代应用程序中,数据加密是保护敏感信息安全的重要手段,AES(高级加密标准)是一种广泛使用的对称加密算法,提供强大的数据保护功能,今天,我将为大家展示如何使用 C# 实现 AES 加密和解密,需要的朋友可以参考下

1. AES 加密简介

AES(Advanced Encryption Standard,高级加密标准)是一种对称加密算法,意味着加密和解密使用相同的密钥。AES 支持不同的密钥长度,如 128 位、192 位和 256 位。为了简便起见,本文将使用 128 位密钥(即 16 字节)进行加密。

2. C# 中的 AES 加密与解密

在 C# 中,System.Security.Cryptography 命名空间提供了内置的 AES 加密支持。通过 Aes 类,我们可以轻松实现加密和解密操作。以下是一个完整的示例代码,展示了如何在 C# 中进行 AES 加密和解密。

    class Program
    {
        private static string key = "1234567890123456"; // 16字节密钥,AES-128
        private static string iv = "1234567890123456";  // 16字节IV(初始化向量)
 
        // 加密函数
        public static string Encrypt(string plainText)
        {
            using (Aes aesAlg = Aes.Create()) // 创建AES加密实例
            {
                aesAlg.Key = Encoding.UTF8.GetBytes(key);  // 设置密钥
                aesAlg.IV = Encoding.UTF8.GetBytes(iv);    // 设置初始化向量
 
                ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); // 创建加密器
 
                using (MemoryStream msEncrypt = new MemoryStream())  // 用于存储加密后的数据
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))  // 创建加密数据流
                    {
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))  // 写入加密流
                        {
                            swEncrypt.Write(plainText);  // 写入明文数据
                        }
                    }
                    // 返回加密后的数据,转换为Base64字符串
                    return Convert.ToBase64String(msEncrypt.ToArray());
                }
            }
        }
 
        // 解密函数
        public static string Decrypt(string cipherText)
        {
            using (Aes aesAlg = Aes.Create()) // 创建AES实例
            {
                aesAlg.Key = Encoding.UTF8.GetBytes(key);  // 设置密钥
                aesAlg.IV = Encoding.UTF8.GetBytes(iv);    // 设置初始化向量
 
                ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);  // 创建解密器
 
                using (MemoryStream msDecrypt = new MemoryStream(Convert.FromBase64String(cipherText)))  // 将Base64字符串转换为字节数组并读取
                {
                    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))  // 创建解密数据流
                    {
                        using (StreamReader srDecrypt = new StreamReader(csDecrypt))  // 从解密流中读取数据
                        {
                            return srDecrypt.ReadToEnd();  // 返回解密后的明文
                        }
                    }
                }
            }
        }
        static void Main(string[] args)
        {
            string originalText = "Hello, AES Encryption!";  // 原始明文
            Console.WriteLine("Original Text: " + originalText);  // 输出原始文本
 
            string encryptedText = Encrypt(originalText);  // 加密
            Console.WriteLine("Encrypted Text: " + encryptedText);  // 输出加密后的文本
 
            string decryptedText = Decrypt(encryptedText);  // 解密
            Console.WriteLine("Decrypted Text: " + decryptedText);  // 输出解密后的文本
 
            Console.ReadKey();
        }
    }

3. 代码详解

  1. 密钥和初始化向量(IV)

    • 在 AES 加密中,密钥长度和初始化向量(IV)的长度非常重要。这里使用了 16 字节的密钥(128 位),也使用了 16 字节的 IV。这是 AES-128 加密所需的标准设置。
  2. 加密过程

    • 使用 Aes.Create() 创建 AES 实例。
    • 设置密钥 (Key) 和初始化向量 (IV)。
    • 使用 CreateEncryptor 创建加密器,接着通过 CryptoStream 和 MemoryStream 实现数据流的加密。
    • 最终将加密后的字节流转换为 Base64 字符串,方便以文本形式存储或传输。
  3. 解密过程

    • 解密过程与加密过程相反。我们使用相同的密钥和 IV,通过 CreateDecryptor 解密数据流,最终恢复原始文本。

4. 示例输出

假设我们加密并解密一段文本 "Hello, AES Encryption!",输出将如下所示:

Original Text: Hello, AES Encryption!
Encrypted Text: P5/fGFh/sUsYOGYOg7wDIA==
Decrypted Text: Hello, AES Encryption!

可以看到,原始文本被成功加密并转换为一个 Base64 编码的字符串,然后又解密回原始的明文。

5. 安全注意事项

在实际应用中,密钥和初始化向量的生成应该更为复杂且具有随机性,以提高加密的安全性。避免使用固定的密钥和 IV,尤其是在生产环境中。

例如,可以使用 RNGCryptoServiceProvider 来生成一个随机的密钥和 IV,而不是手动指定它们。这样可以增强加密的强度,确保每次加密都具有独一无二的安全性。

6. 结语

通过上述示例,我们学习了如何使用 C# 实现 AES 加密和解密。AES 是一种高效且安全的对称加密算法,广泛应用于各类数据保护和信息安全场景。掌握它的实现,能帮助我们在开发中保护敏感数据,确保应用程序的安全性。

到此这篇关于使用C#实现AES加密与解密的示例的文章就介绍到这了,更多相关C# AES加密与解密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C# 泛型参数转换

    C# 泛型参数转换

    本文介绍了C# 泛型参数转换的相关知识,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • C# 如何获取出错的错误所在行数信息

    C# 如何获取出错的错误所在行数信息

    本文主要介绍 C# 中获取错误所在行的方法,在开发过程中或是用户在使用过程中,出错的话方便我们快速定位到错误的位置,以便我们处理。
    2016-04-04
  • C#之HttpClient的同步使用方式

    C#之HttpClient的同步使用方式

    这篇文章主要介绍了C#之HttpClient的同步使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 一文带你搞懂什么是WPF中的依赖属性

    一文带你搞懂什么是WPF中的依赖属性

    依赖属性是 WPF 的一个核心概念,它为传统的 .NET 属性提供了增强功能,支持绑定、样式、动画和默认值等功能,下面我们就来看看WPF依赖属性的具体应用吧
    2024-11-11
  • C#通过PInvoke调用c++函数的备忘录的实例详解

    C#通过PInvoke调用c++函数的备忘录的实例详解

    这篇文章主要介绍了C#通过PInvoke调用c++函数的备忘录的实例以及相关知识点内容,有兴趣的朋友们学习下。
    2019-08-08
  • C#连接Oracle数据库的方法

    C#连接Oracle数据库的方法

    这篇文章主要介绍了C#连接Oracle数据库的方法,实例分析了C#连接Oracle数据库的方法与主要实现技巧,需要的朋友可以参考下
    2015-06-06
  • C# 实现简易的串口监视上位机功能附源码下载

    C# 实现简易的串口监视上位机功能附源码下载

    这篇文章主要介绍了C# 实现简易的串口监视上位机功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • C#集合本质之链表的用法详解

    C#集合本质之链表的用法详解

    本文详细讲解了C#集合本质之链表的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • c#网络唤醒功能实现

    c#网络唤醒功能实现

    网络唤醒实现了对网络的集中管理,即在任何时刻,网管中心的IT管理人员可以经由网络远程唤醒一台处于休眠或关机状态的计算机,下面使用c#实现网络唤醒功能
    2014-01-01
  • 在C#中将Word转换为PostScript的代码实现

    在C#中将Word转换为PostScript的代码实现

    在需要高质量打印或跨平台文档分发的场景中,将Word转换为PostScript是专业选择,所以本文给大家介绍了如何在 C# 中将 Word 转换为 PostScript,需要的朋友可以参考下
    2025-09-09

最新评论