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日

相关文章

  • AspNetPager分页控件源代码(Version 4.2)第2/2页

    分页控件是网站开发中非常常用的一个控件,它可以将数据分页显示,并提供页码、跳转等功能,能够方便用户浏览大量内容。下面我将详细讲解AspNetPager分页控件的使用方法和源代码。 安装AspNetPager分页控件 在使用AspNetPager分页控件之前,我们需要先将其安装到项目中,具体方法如下: 1. 下载AspNetPager分页控件 我们可以从NuG…

    C# 2023年5月31日
    00
  • 无法从 int? 转换为 int 运行时出现错误

    问题分析 在程序中常常会使用到可空类型(Nullable Type),可空类型表示能存储特定值类型(如 int、float)或者 null 值。在使用可空类型时,我们需要注意到数据类型转换的问题。例如,当我们把一个可空类型的 int? 变量赋值给 int 类型的变量时,就需要进行数据类型转换。如果该 int? 变量的值为 null,就会在进行转换时出现运行时…

    C# 2023年5月15日
    00
  • C#中多线程Tread的使用(推荐)

    C#中多线程Thread的使用 在C#中,可以通过多线程来提升程序的性能。多线程使得程序可以同时执行多个任务,这样增加了程序的吞吐量,提高了程序的响应速度,让用户能够更好的体验使用。本文将详细介绍C#中多线程Thread的使用。 创建Thread对象 在开始使用Thread之前,需要首先创建Thread对象。创建对象有两种方式: 通过ThreadStart委…

    C# 2023年5月15日
    00
  • C#中委托的基础入门与实现方法

    下面是C#中委托的基础入门与实现方法的攻略。 什么是委托 在C#中,委托是一种类型,它允许我们将一个或多个方法作为参数传递给其他方法,或者将方法保存在集合中等。委托本质上是一个指向方法的引用。使用委托可以使代码更加灵活、扩展性更好。 委托的声明和实例化 声明一个委托需要使用 delegate 关键字,并定义返回类型和参数列表。比如: delegate voi…

    C# 2023年5月15日
    00
  • C#实现简单的文件加密与解密方式

    C#实现简单的文件加密与解密方式攻略 介绍 本文详细讲解如何使用C#语言实现简单的文件加密与解密方式。文件加密是数据保护的一种方法,通过对敏感文件进行加密,确保在未授权的情况下无法访问和解读文件内容。本文讲解将使用对称加密算法 AES 实现文件加密与解密。 实现过程 导入 System.Security.Cryptography 命名空间。该命名空间提供了对…

    C# 2023年5月15日
    00
  • C# memcache 使用介绍

    C#memcache使用介绍 Memcache是一种基于内存的缓存服务,通过存储在内存中的数据来提升Web应用程序的性能。在C#中,可以通过使用开源的MongoDB.Driver.Net软件包来进行Memcache的使用。 1. 安装MongoDB.Driver.Net 在C#中使用Memcache需要先安装MongoDB.Driver.Net软件包,可以通…

    C# 2023年5月15日
    00
  • ASP.net 验证码实现代码(C#)

    ASP.NET 验证码实现代码(C#)攻略 前言 验证码是一种常用的安全验证手段,用于防止恶意机器人注册、登录、提交表单等操作。本篇文章将介绍如何在ASP.NET中使用C#实现验证码功能。 实现过程 1. 生成随机字符串 首先,我们需要生成一串随机字符串,作为验证码。可以使用Random类和StringBuilder类来生成: Random random =…

    C# 2023年5月31日
    00
  • C#使用RenderControl将GridView控件导出到EXCEL的方法

    下面是详细讲解“C#使用RenderControl将GridView控件导出到EXCEL的方法”的完整攻略。 第一步:引用命名空间 在C#代码中,使用RenderControl方法需要引用两个命名空间:System.IO和System.Web.UI。代码示例: using System.IO; using System.Web.UI; 第二步:编写导出方法 …

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