广告位联系
返回顶部
分享到

使用C#实现AES加密与解密

C#教程 来源:互联网 作者:佚名 发布时间:2024-12-02 22:06:06 人浏览
摘要

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

1. AES 加密简介

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

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!",输出将如下所示:

1

2

3

Original Text: Hello, AES Encryption!

Encrypted Text: P5/fGFh/sUsYOGYOg7wDIA==

Decrypted Text: Hello, AES Encryption!

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

5. 安全注意事项

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

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

6. 结语

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


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • C# winfrom异步加载数据不影响窗体UI的操作方法
    在数字浪潮汹涌澎湃的时代,程序开发宛如一座神秘而宏伟的魔法城堡,矗立在科技的浩瀚星空中。代码的字符,似那闪烁的星辰,按照特
  • 使用C#实现AES加密与解密
    1. AES 加密简介 AES(Advanced Encryption Standard,高级加密标准)是一种对称加密算法,意味着加密和解密使用相同的密钥。AES 支持不同的密钥长
  • 在idea中利用maven实现多环境配置自动打包的流程

    在idea中利用maven实现多环境配置自动打包的流程
    spring的多环境配置 spring提供了多环境配置文件的功能,只需要根据配置文件后缀即可加载对应的配置文件 1 2 3 4 spring: profiles: # 修改后缀即
  • Java实现自定义重试工具类介绍
    Spring-retry、guava的Retry都提供有重试工具,但二者均存在一个确缺点,即如果重试等待过程中会一直阻塞工作线程,这对于在生产环境使用是
  • C#中SetStyle的具体使用介绍
    在C#的Windows Forms应用程序中,SetStyle方法是Control类的一个成员,用于启用或禁用特定的控件样式。这些样式控制控件的不同行为和外观。以
  • C# WinForm实现画笔签名功能介绍

    C# WinForm实现画笔签名功能介绍
    实现效果 签名功能的显示界面如下图: 该效果主要实现如下功能: 1、提供画布,设计画笔类,实现画笔签名 2、点击重签按钮清空画布
  • C#文字识别API场景解析、表格识别提取功能实现
    在快节奏的工作与生活环境中,如何提高企业工作效率、提升用户体验成为了人们追求的共同目标。针对市场发展需求,一种将任意场景图
  • c#线性回归和多项式拟合示例详解
    1. 线性回归 公式:线性回归的目标是拟合一条直线,形式为: y=mx+by=mx+b 其中: yy是因变量(目标值) xx是自变量(特征值) mm是斜率(s
  • C#删除Word文档中的段落的方法

    C#删除Word文档中的段落的方法
    免费.NET Word 库 -Free Spire.Doc for .NET。该库支持实现创建、编辑、转换Word文档等多种操作,可以直接在Visual Studio中通过NuGet搜索 FreeSpire.Doc,然
  • c#强制类型转换int方式
    c#强制类型转换int 在 C# 中有三种方法把其它类型转为整型,分别是 : int.Parse() 强制转换(int) Convert.ToInt32() 下面探讨它们各自的特点及效率
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计