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日

相关文章

  • C#代码实现PDF文档操作类

    下面我将为您详细讲解如何实现C#代码操作PDF文档的完整攻略。本篇攻略的主要内容如下: 确定操作的PDF文档格式 选择操作PDF文档的第三方库 执行PDF文档操作 以下是具体的讲解: 1. 确定操作的PDF文档格式 在操作PDF文档之前,我们需要先明确需要操作的PDF文档的格式。PDF(Portable Document Format)是一种由Adobe公司…

    C# 2023年6月1日
    00
  • C#日历样式的下拉式计算器实例讲解

    下面我来详细讲解一下“C#日历样式的下拉式计算器实例讲解”的完整攻略。 一、准备工作 在开始之前,我们需要完成以下准备工作: 安装好Visual Studio开发环境 创建一个Windows Froms应用程序项目 在表单中添加控件:日历控件、文本框控件、下拉框控件、按钮控件等 二、编写代码 1. 日历控件的使用 首先,我们需要使用日历控件来获取日期。在窗体…

    C# 2023年6月6日
    00
  • 关于正则表达式基本语法的应用详解(必看篇)

    关于正则表达式基本语法的应用详解(必看篇) 1. 正则表达式(RegExp)是什么? 正则表达式(RegExp,又称正规表达式、正则表示式、正则表达式式、规则表达式等)是计算机科学中的一个概念。它可以用来匹配特定模式的文本,并对符合条件的文本进行操作。 2. 正则表达式的基本语法 2.1 字符组 使用方括号表示,可以匹配括号内的任意字符。 示例: var r…

    C# 2023年6月7日
    00
  • LINQ操作符SelectMany的用法

    下面是对” LINQ操作符SelectMany的用法 “的详细解释和示例说明。 什么是 SelectMany? 先来了解一下 SelectMany。在 LINQ 中,SelectMany 多用于关联查询,用于扁平化嵌套集合。SelectMany 可以将一个序列中的每个元素转换为另一个序列,并将每个序列的元素组合成一个序列。这一操作通常用于关联查询,将子类转换…

    C# 2023年6月1日
    00
  • c#字符串去掉空格的二种方法(去掉两端空格)

    当我们用C#编写程序时,经常需要对字符串进行处理,比如去掉字符串两端的空格。下面分别介绍两种方法: 方法一:使用Trim()函数 C#的String类内置了Trim()函数,可以用来去掉字符串两端的空格。使用方法非常简单,只需要在需要处理的字符串后面添加.Trim()即可。 string str = " Hello World! "; s…

    C# 2023年6月8日
    00
  • .Net Core中自定义认证实现

    在ASP.NET Core中,可以使用自定义认证实现来实现自定义身份验证方案。在本攻略中,我们将介绍如何在ASP.NET Core中实现自定义认证实现。 步骤一:创建ASP.NET Core MVC项目 首先,需要创建一个ASP.NET Core MVC项目。可以使用以下命令在命令行中创建一个新的ASP.NET Core MVC项目: dotnet new …

    C# 2023年5月17日
    00
  • 在Linux中安装ASPNET.Core3.0运行时的示例代码

    在Linux中安装ASP.NET Core 3.0运行时的示例代码 在本文中,我们将详细讲解如何在Linux中安装ASP.NET Core 3.0运行时,并提供两个示例说明。 准备工作 在开始之前,您需要安装以下软件: Linux操作系统(本文以Ubuntu 18.04为例) .NET Core 3.0 SDK 安装ASP.NET Core 3.0运行时 添…

    C# 2023年5月16日
    00
  • 使用PowerShell .Net获取电脑中的UUID

    使用PowerShell .Net获取电脑中的UUID 在Windows系统中,每台计算机都有唯一的标识符UUID(Universally Unique Identifier),可以用于识别计算机。使用PowerShell .Net可以轻松获取计算机的UUID。 步骤 打开PowerShell环境。在开始菜单中搜索“PowerShell”并打开。 在Powe…

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