C#代码实现对AES加密解密

下面是C#代码实现对AES加密解密的完整攻略。

1. 引入所需的命名空间

在C#代码实现对AES加密解密之前,我们需要先引入所需的命名空间。对于AES加密解密,我们需要引入System.Security.Cryptography命名空间。

using System.Security.Cryptography;

2. 生成密钥和向量

在进行AES加密解密之前,我们需要先生成密钥和向量。使用Aes.Create()方法可以创建一个Aes对象,然后可以调用GenerateKey()GenerateIV()方法生成随机的密钥和向量。

Aes aes = Aes.Create();
aes.GenerateKey();
aes.GenerateIV();
byte[] key = aes.Key;
byte[] iv = aes.IV;

3. 对明文进行加密

对明文进行加密,我们需要先将明文转换为字节数组,然后创建Aes对象,设置密钥和向量,并调用CreateEncryptor()方法创建一个加密器对象,最后使用加密器对象的TransformFinalBlock()方法进行加密。

string text = "Hello, world!";
byte[] plaintext = Encoding.UTF8.GetBytes(text);
Aes aes = Aes.Create();
aes.Key = key;
aes.IV = iv;
ICryptoTransform encryptor = aes.CreateEncryptor();
byte[] ciphertext = encryptor.TransformFinalBlock(plaintext, 0, plaintext.Length);

4. 对密文进行解密

对密文进行解密,我们需要先创建Aes对象,设置密钥和向量,并调用CreateDecryptor()方法创建一个解密器对象,然后使用解密器对象的TransformFinalBlock()方法进行解密,最后将解密后的字节数组转换为字符串。

Aes aes = Aes.Create();
aes.Key = key;
aes.IV = iv;
ICryptoTransform decryptor = aes.CreateDecryptor();
byte[] plaintext = decryptor.TransformFinalBlock(ciphertext, 0, ciphertext.Length);
string text = Encoding.UTF8.GetString(plaintext);

示例1:加密解密字符串

下面是一个加密解密字符串的示例。

string text = "Hello, world!";
byte[] plaintext = Encoding.UTF8.GetBytes(text);

Aes aes = Aes.Create();
aes.GenerateKey();
aes.GenerateIV();
byte[] key = aes.Key;
byte[] iv = aes.IV;

ICryptoTransform encryptor = aes.CreateEncryptor();
byte[] ciphertext = encryptor.TransformFinalBlock(plaintext, 0, plaintext.Length);

ICryptoTransform decryptor = aes.CreateDecryptor();
byte[] decrypted = decryptor.TransformFinalBlock(ciphertext, 0, ciphertext.Length);
string result = Encoding.UTF8.GetString(decrypted);
Console.WriteLine("Original: {0}", text);
Console.WriteLine("Decrypted: {0}", result);

输出结果如下:

Original: Hello, world!
Decrypted: Hello, world!

示例2:加密解密文件

下面是一个加密解密文件的示例。

string plaintextFile = @"D:\plaintext.txt";
string ciphertextFile = @"D:\ciphertext.txt";
string decryptedFile = @"D:\decrypted.txt";

byte[] key;
byte[] iv;
using (Aes aes = Aes.Create())
{
    aes.GenerateKey();
    aes.GenerateIV();
    key = aes.Key;
    iv = aes.IV;

    using (ICryptoTransform encryptor = aes.CreateEncryptor())
    {
        using (FileStream plaintextStream = new FileStream(plaintextFile, FileMode.Open))
        {
            using (FileStream ciphertextStream = new FileStream(ciphertextFile, FileMode.Create))
            {
                using (CryptoStream cryptoStream = new CryptoStream(ciphertextStream, encryptor, CryptoStreamMode.Write))
                {
                    plaintextStream.CopyTo(cryptoStream);
                }
            }
        }
    }

    using (ICryptoTransform decryptor = aes.CreateDecryptor())
    {
        using (FileStream ciphertextStream = new FileStream(ciphertextFile, FileMode.Open))
        {
            using (FileStream decryptedStream = new FileStream(decryptedFile, FileMode.Create))
            {
                using (CryptoStream cryptoStream = new CryptoStream(ciphertextStream, decryptor, CryptoStreamMode.Read))
                {
                    cryptoStream.CopyTo(decryptedStream);
                }
            }
        }
    }
}

string plaintext = File.ReadAllText(plaintextFile);
string decrypted = File.ReadAllText(decryptedFile);
Console.WriteLine("Original: {0}", plaintext);
Console.WriteLine("Decrypted: {0}", decrypted);

这个示例将plaintext.txt文件加密为ciphertext.txt文件,然后将ciphertext.txt文件解密为decrypted.txt文件,并将plaintext.txtdecrypted.txt文件的内容输出。

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

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

相关文章

  • .NET Core Windows环境安装配置教程

    .NET Core Windows环境安装配置教程 在本攻略中,我们将详细讲解如何在Windows环境下安装和配置.NET Core,并提供两个示例说明。 安装.NET Core 在Windows环境下安装.NET Core,需要进行以下步骤: 下载.NET Core SDK 在.NET Core官网上下载最新版本的.NET Core SDK,并按照安装向导…

    C# 2023年5月16日
    00
  • Sitecore10 Demo演示环境Azure一键部署(Step By Step Guide to installing Sitecore10 in Azure Paas)

    本文演示Sitecore XP Single(XP0)在Azure上的一键部署,即“30分钟生成Sitecore演示环境”的一环。 关于XP(即Sitecore Experience Platform) roles的相关介绍移步 XP Single配置主要用来开发和测试: Four Sitecore roles: Content Delivery, Cont…

    C# 2023年4月25日
    00
  • C#定时器组件FluentScheduler用法

    C#定时器组件FluentScheduler用法 概述 FluentScheduler是一个C#的定时器组件,通过简洁的API使得编写定时任务变得非常简单。它支持非常灵活的定时方案配置,包括每隔一定时间、某一特定时刻执行、星期几执行等。并且,FluentScheduler支持多线程执行任务,可以极大地提升任务执行效率。 安装 FluentScheduler可…

    C# 2023年6月1日
    00
  • 网站被攻击了!!!

    重要声明-针对攻击者 网站pljzy.top被某人攻击 ZY知识库 首先 说我网站抄袭,文章抄袭,ok,你列举一下我有那几篇文章是抄的别人的?自己眼睛不看的是吧,但凡我参考的别人的文章我都会放原文地址。 先放几张图片,真搞不懂我抄谁了,下面全是我自己电脑的md文件,我抄谁的了?全是我自己做的笔记。 其次说我网站抄袭,原作者都没说话,轮到你说了吗?这个博客本来…

    C# 2023年5月7日
    00
  • C# 实现抓包的实例代码

    下面是详细的“C# 实现抓包的实例代码”的攻略。 一、背景介绍 在网络通讯过程中,我们需要获取通讯双方的数据,这个获取的过程就是网络抓包。在 C# 中,我们可以通过使用第三方库 SharpPcap 实现抓包。下面将会对使用 SharpPcap 进行网络抓包的实现过程进行详细讲解。 二、环境准备 在进行网络抓包之前,需要在计算机上安装 WinPcap。WinP…

    C# 2023年6月1日
    00
  • Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容

    Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容 在 Linux 系统中,我们可以使用 node.js 来提取 Word(doc/docx) 及 PDF 文本的内容。本攻略将介绍如何使用 node.js 提取 Word(doc/docx) 及 PDF 文本的内容,并提供两个示例说明。 步骤1:安装依赖 在 Linux 系统…

    C# 2023年5月17日
    00
  • C#实现求一组数据众数的方法

    要实现求一组数据的众数,可以采用以下步骤: 步骤一:读入数据 首先要将一组数据读入程序中,可以使用数组、列表等数据结构来存储数据。 示例代码: int[] data = { 2, 3, 2, 4, 5, 2, 1 }; 步骤二:找出出现次数最多的数 通过遍历数组或列表,统计每个数出现的次数,并记录出现次数最多的数。 示例代码: int maxCount = …

    C# 2023年6月7日
    00
  • Asp.Net Core7 preview4限流中间件新特性详解

    Asp.Net Core7 preview4限流中间件新特性详解 在Asp.Net Core7 preview4中,新增了限流中间件的新特性,可以帮助我们更好地控制应用程序的流量。本攻略将深入探讨Asp.Net Core7 preview4限流中间件的新特性,并提供两个示例说明。 安装限流中间件 在Asp.Net Core7 preview4应用程序中,您需…

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