C#实现对AES加密和解密的方法

首先,C#实现对AES加密和解密需要使用 System.Security.Cryptography 命名空间中提供的 Aes 类。下面是具体的实现步骤:

1. 导入命名空间

using System.Security.Cryptography;

2. 创建 Aes 对象

Aes aes = Aes.Create();

3. 设置密钥和向量

密钥和向量是 AES 加密时需要的两个参数,可以自己设置或者使用随机生成的值。需要注意的是,密钥和向量的长度必须符合 AES 算法要求。

// 设置密钥,默认长度为 256 位
aes.Key = Encoding.UTF8.GetBytes("12345678901234567890123456789012");

// 设置向量,默认长度为 128 位
aes.IV = Encoding.UTF8.GetBytes("1234567890123456");

4. 创建加密器和解密器

在创建加密和解密器之前,需要设置加密模式和填充方式。

// 设置加密模式为 CBC
aes.Mode = CipherMode.CBC;

// 设置填充方式为 PKCS7
aes.Padding = PaddingMode.PKCS7;

// 创建加密器
ICryptoTransform encryptor = aes.CreateEncryptor();

// 创建解密器
ICryptoTransform decryptor = aes.CreateDecryptor();

5. 加密数据

string plainText = "hello world";

// 转换明文数据为字节数组
byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);

// 加密数据
byte[] cipherBytes = encryptor.TransformFinalBlock(plainBytes, 0, plainBytes.Length);

// 转换加密后的字节数组为 Base64 编码的字符串
string cipherText = Convert.ToBase64String(cipherBytes);

6. 解密数据

// 转换 Base64 编码的字符串为字节数组
byte[] cipherBytes = Convert.FromBase64String(cipherText);

// 解密数据
byte[] plainBytes = decryptor.TransformFinalBlock(cipherBytes, 0, cipherBytes.Length);

// 转换解密后的字节数组为明文字符串
string plainText = Encoding.UTF8.GetString(plainBytes);

下面是两条具体的示例说明:

示例一:使用随机生成的密钥和向量加密和解密数据

// 创建 Aes 对象
Aes aes = Aes.Create();

// 设置加密模式和填充方式
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;

// 随机生成密钥和向量
aes.GenerateKey();
aes.GenerateIV();

// 创建加密器和解密器
ICryptoTransform encryptor = aes.CreateEncryptor();
ICryptoTransform decryptor = aes.CreateDecryptor();

// 明文数据
string plainText = "hello world";

// 加密数据
byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
byte[] cipherBytes = encryptor.TransformFinalBlock(plainBytes, 0, plainBytes.Length);

// 解密数据
byte[] decryptedBytes = decryptor.TransformFinalBlock(cipherBytes, 0, cipherBytes.Length);
string decryptedText = Encoding.UTF8.GetString(decryptedBytes);

Console.WriteLine("明文数据:{0}", plainText);
Console.WriteLine("加密后数据:{0}", Convert.ToBase64String(cipherBytes));
Console.WriteLine("解密后数据:{0}", decryptedText);

示例二:使用自定义密钥和向量加密和解密数据

// 创建 Aes 对象
Aes aes = Aes.Create();

// 设置加密模式和填充方式
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;

// 设置密钥和向量
byte[] key = Encoding.UTF8.GetBytes("12345678901234567890123456789012");
byte[] iv = Encoding.UTF8.GetBytes("1234567890123456");
aes.Key = key;
aes.IV = iv;

// 创建加密器和解密器
ICryptoTransform encryptor = aes.CreateEncryptor();
ICryptoTransform decryptor = aes.CreateDecryptor();

// 明文数据
string plainText = "hello world";

// 加密数据
byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
byte[] cipherBytes = encryptor.TransformFinalBlock(plainBytes, 0, plainBytes.Length);

// 解密数据
byte[] decryptedBytes = decryptor.TransformFinalBlock(cipherBytes, 0, cipherBytes.Length);
string decryptedText = Encoding.UTF8.GetString(decryptedBytes);

Console.WriteLine("明文数据:{0}", plainText);
Console.WriteLine("加密后数据:{0}", Convert.ToBase64String(cipherBytes));
Console.WriteLine("解密后数据:{0}", decryptedText);

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现对AES加密和解密的方法 - Python技术站

(2)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • ASP.NET MVC4入门教程(三):添加一个视图

    让我来详细讲解一下“ASP.NET MVC4入门教程(三):添加一个视图”的完整攻略。 1. 为什么要添加视图 首先,需要理解什么是ASP.NET MVC4中的视图。视图是MVC模式中的“V”(即View)。一般来说,控制器从模型中获取数据并进行逻辑处理,然后将处理后的结果传递给视图,视图负责将数据渲染成HTML页面,最终呈现给用户。 由于视图是MVC模式中…

    C# 2023年5月31日
    00
  • C# 汉字转化拼音的简单实例代码

    让我为你详细讲解“C#汉字转化拼音的简单实例代码”的完整攻略。 概述 本文将介绍如何使用C#语言实现将汉字转换成拼音的功能。我们将使用一个开源项目,它提供了一个轻量级的拼音转换引擎。这个引擎能够在内存中快速地将汉字转换成拼音,同时支持多音字和注音符号。我们将使用这个引擎作为我们的核心。 步骤 1. 准备工作 首先,我们需要下载并引用 Pinyin4Net 项…

    C# 2023年6月7日
    00
  • Spring.Net IOC依赖注入原理流程解析

    下面是对于“Spring.Net IOC依赖注入原理流程解析”的详细讲解: 1. 什么是IOC? IOC 全称是 Inversion of Control,即控制反转。 意思是将原本由程序员编码决定的对象间调用关系,通过外部配置文件描述,交由 Spring.Net 框架来管理和实现。 Spring.Net 提供的 IOC 叫做 Dependency Inje…

    C# 2023年6月3日
    00
  • 图文详解C#中的协变与逆变

    图文详解C#中的协变与逆变 什么是协变与逆变 协变和逆变是指可以使用派生类型来代替基类型的能力。协变用于返回值类型,逆变用于参数类型。在C#中,协变和逆变可以应用于委托(delegate)和泛型(generic)类型。 协变 协变可用于返回类型,指一个方法返回类型可以使用它继承的类型。使用out关键字可实现协变。 示例1 class Program { st…

    C# 2023年5月15日
    00
  • C#如何远程读取服务器上的文本内容

    下面是详细讲解“C#如何远程读取服务器上的文本内容”的完整攻略: 使用WebRequest和WebResponse类 使用C#中的WebRequest和WebResponse类可以实现对远程文本内容的读取。下面是一个示例代码: string url = "http://your_remote_text_file_url"; WebRequ…

    C# 2023年6月6日
    00
  • WPF弹出自定义窗口的方法

    WPF是一种基于XAML语言的用户界面框架,可以用于创建跨平台的用户界面(UI)。在WPF应用程序中,有时需要弹出自定义窗口以实现特殊的需求,本文将详细讲解WPF弹出自定义窗口的方法。 第一步:创建自定义窗口 要弹出自定义窗口,首先需要创建自定义窗口。在WPF中,可以通过XAML语言或代码创建自定义窗口。以下是一个简单的例子: <Window x:Cl…

    C# 2023年6月3日
    00
  • C#实现的Socket服务器端、客户端代码分享

    接下来我将详细讲解如何实现C# Socket服务器端、客户端代码的分享。 一、概述 Socket是一种应用程序编程接口(API),用于在两个计算机之间进行网络通信。在C#中,可以使用System.Net.Sockets命名空间来创建和使用Socket。本攻略将介绍如何使用C#创建一个简单的Socket服务器端和客户端,并分享相关代码。 二、Socket服务器…

    C# 2023年6月7日
    00
  • C#面试题整理(带答案)

    下面是详细的攻略: 第一步:标题规范 为了让文章更加规范易读,我们需要规范标题的格式。一般来说,我们需要在标题前添加井号 #,以表示标题的级别。同时,作为整理类文章,我们可以使用层次化的标题结构,做到标题信息清晰明了。 C#面试题整理(带答案) 一、基础知识部分 1. C#中的值类型和引用类型有哪些? 2. C#中的装箱和拆箱是什么? …… 二、高级部分 1…

    C# 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部