使用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#中使用Spire.doc对word的操作方式

    C#中使用Spire.doc对word的操作方式

    这篇文章主要介绍了C#中使用Spire.doc对word的操作方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • C# 创建高精度定时器的示例

    C# 创建高精度定时器的示例

    这篇文章主要介绍了C# 创建高精度定时器的示例,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-02-02
  • C#简单实现防止多个程序运行的方法

    C#简单实现防止多个程序运行的方法

    这篇文章主要介绍了C#简单实现防止多个程序运行的方法,涉及C#进程操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-02-02
  • C#中TCP粘包问题的解决方法

    C#中TCP粘包问题的解决方法

    这篇文章主要为大家详细介绍了C#中TCP粘包问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 详解c#读取XML的实例代码

    详解c#读取XML的实例代码

    XML文件是一种常用的文件格式,本篇文章主要介绍了c#读取XML的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • C#身份证号码验证是否正确

    C#身份证号码验证是否正确

    这一篇关于C#语言验证18位身份证号码的验证方法和实例代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-09-09
  • C# 类的声明详解

    C# 类的声明详解

    本文主要对C# 类的声明进行详细介绍。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • C#使用FileStream循环读取大文件数据的方法示例

    C#使用FileStream循环读取大文件数据的方法示例

    这篇文章主要介绍了C#使用FileStream循环读取大文件数据的方法,结合实例形式分析了FileStream文件流的形式循环读取大文件的相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • C#与PLC通讯的实现代码

    C#与PLC通讯的实现代码

    这篇文章主要介绍了C#与PLC通讯的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • C#模拟MSN窗体抖动的实现代码

    C#模拟MSN窗体抖动的实现代码

    这篇文章主要介绍了C#模拟MSN窗体抖动的实现代码,非常实用的一个功能,需要的朋友可以参考下
    2014-08-08

最新评论