IRONSOFTWAREHOME
开发者更新

C# AES 加密(开发者如何使用)

Jacob Mellor,Team Iron 的首席技术官
Jacob Mellor
Updated: 2026年4月21日

AES(高级加密标准) 是最常用的对称加密算法之一。 它使用相同的密钥来加密和解密数据,使 AES 加密在许多应用程序中能有效快速地保护敏感数据。

本教程将专注于 C# 中的 AES 加密,使用 AES 类来加密和解密数据以及 IronPDF 库。 我们将涵盖实用示例,分步讲解加密过程,并了解如何使用密码块链(CBC)模式增加安全性。 我们还将讨论加密密钥管理和初始化向量(IV)的作用。

Introduction of AES Encryption in C#

高级加密标准(AES)是一种由美国国家标准与技术研究院 (NIST) 标准化的对称加密算法。 该算法可以拥有 128、192 或 256 位的密钥大小,可高度安全地加密机密数据。 它使用相同的加密密钥来加密和解密数据。

AES的工作原理是将原始数据分成区块并对这些区块进行转换。 它以不同的密码模式运行,如 CBC(密码块链)和电子密码本(ECB),每种模式均提供不同的安全特性。

How AES Works in C#

C# 中的 AES 加密算法是 System.Security.Cryptography 命名空间的一部分。 此命名空间包括 AES 类,允许我们创建 AES 实例,指定密钥大小、密码模式和填充模式,然后使用秘密密钥加密和解密数据。

要在 C# 中使用 AES,请遵循以下基本步骤:

  1. 使用Aes.Create()创建AES类的实例。
  2. 设置密钥、IV 和其他相关参数,如密码模式。
  3. 使用 ICryptoTransform 接口加密数据并将其写入 MemoryStream。
  4. 使用相同的密钥和 IV 解密数据。

我们来创建一个基本的加密和解密 C# 程序。

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

class Program
{
    // Declare a static byte array for encrypted data
    public static byte[] encryptedData;

    // Main method to demonstrate encryption and decryption
    public static void Main(string[] args)
    {
        // String plaintext to be encrypted
        string plaintext = "This is some sensitive data!";
        string key = "abcdefghijklmnop"; // 128-bit key (16 characters)

        // Encrypt the plaintext
        string ciphertext = Encrypt(plaintext, key);
        Console.WriteLine("Encrypted Data: " + ciphertext);

        // Decrypt the ciphertext
        string decryptedData = Decrypt(ciphertext, key);
        Console.WriteLine("Decrypted Data: " + decryptedData);
    }

    // Method to encrypt data
    public static string Encrypt(string plaintext, string key)
    {
        // Create a new instance of the AES encryption algorithm
        using (Aes aes = Aes.Create())
        {
            aes.Key = Encoding.UTF8.GetBytes(key);
            aes.IV = new byte[16]; // Initialization vector (IV)

            // Create an encryptor to perform the stream transform
            ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);

            // Create the streams used for encryption
            using (MemoryStream ms = new MemoryStream())
            {
                // Create a CryptoStream using the encryptor
                using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                {
                    using (StreamWriter sw = new StreamWriter(cs))
                    {
                        sw.Write(plaintext);
                    }
                }
                // Store the encrypted data in the public static byte array
                encryptedData = ms.ToArray();
                return Convert.ToBase64String(encryptedData);
            }
        }
    }

    // Method to decrypt data
    public static string Decrypt(string ciphertext, string key)
    {
        using (Aes aes = Aes.Create())
        {
            aes.Key = Encoding.UTF8.GetBytes(key);
            aes.IV = new byte[16]; // Initialization vector (IV)

            // Create a decryptor to perform the stream transform
            ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);

            // Create the streams used for decryption
            using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(ciphertext)))
            {
                using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader sr = new StreamReader(cs))
                    {
                        return sr.ReadToEnd();
                    }
                }
            }
        }
    }
}

C# AES加密(对开发者的工作原理):图1 - 使用内存流的加密和解密输出

代码解释

  1. **Aes.Create():**这将创建AES加密算法的新实例。
  2. **aes.Key:**用于加密和解密的密钥。 它必须是有效大小,如 128 位(16 字节)、192 位或 256 位。
  3. **aes.IV:**初始化向量(IV),用于使加密过程随机化。 在此示例中,我们使用全零 IV 以简化。
  4. **MemoryStream:**这使我们能够以字节流的形式处理加密数据。
  5. **CryptoStream:**它转换数据流(加密或解密)。

高级示例:使用自定义密钥和 IV 进行 AES 加密

我们在前一个示例的基础上建立,通过生成随机密钥和IV,确保加密更安全。

public static string EncryptData(string plaintext)
{
    using (Aes aes = Aes.Create())
    {
        aes.Key = new byte[32]; // AES-256 requires a 256-bit key (32 bytes)
        aes.IV = new byte[16];  // 128-bit block size

        // Randomly generate key and IV
        using (RandomNumberGenerator rng = RandomNumberGenerator.Create())
        {
            rng.GetBytes(aes.Key); // Generate a random key
            rng.GetBytes(aes.IV);  // Generate a random IV
        }

        // Create an encryptor to perform the stream transform
        ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);

        // Create the streams used for encryption
        using (MemoryStream ms = new MemoryStream())
        {
            using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
            {
                using (StreamWriter sw = new StreamWriter(cs))
                {
                    sw.Write(plaintext);
                }
            }
            return Convert.ToBase64String(ms.ToArray());
        }
    }
}

在这种情况下,每次调用该函数时,我们都会生成一个新密钥和IV。 这提供了更强的加密,因为对于每个操作不会重复使用相同的密钥。 AES 支持的密钥大小包括 128、192 和 256 位。

使用 AES 解密数据

解密是加密数据的逆过程。 在我们的示例中,必须提供用于加密的相同密钥和 IV 才能解密数据。 解密过程涉及将加密数据转换回其原始形式。

以下是一个使用先前加密数据的示例:

public static string DecryptData(string ciphertext, byte[] key, byte[] iv)
{
    using (Aes aes = Aes.Create())
    {
        aes.Key = key;
        aes.IV = iv;

        // Create a decryptor to perform the stream transform
        ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);

        // Create the streams used for decryption
        using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(ciphertext)))
        {
            using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
            {
                using (StreamReader sr = new StreamReader(cs))
                {
                    return sr.ReadToEnd();
                }
            }
        }
    }
}

此代码将加密数据解密回原始数据。

与 AES 加密结合使用的 IronPDF

IronPDF 是一个简单且开发者友好的 .NET 库,旨在使用简单的 C# 代码生成、编辑和操作 PDF。 它允许开发人员直接从 HTML、CSS 和 JavaScript创建 PDF 文档,这在动态生成报告、发票或其他文档时非常有用。 通过支持合并、分割以及添加密码或数字签名等安全功能,IronPDF 是 .NET 应用程序中全面的 PDF 生成解决方案。

将 IronPDF 与 AES 加密集成

C# AES加密(对开发者的工作原理):图2 - IronPDF

当您生成敏感报告或文档时,可能需要确保在共享之前对 PDF 内的数据进行加密。 AES(高级加密标准)加密是安全加密 PDF 文件内容的完美解决方案。 通过结合使用 IronPDF 和 AES 加密,您可以保护 PDF 中的数据,同时仍可以操作文档本身。

步骤 1:使用 IronPDF 创建 PDF

使用ChromePdfRenderer类从 HTML 内容生成 PDF 并保存到文件:

var htmlContent = "<h1>Confidential</h1><p>This is sensitive data.</p>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs(@"C:\Reports\ConfidentialReport.pdf");

步骤 2:使用 AES 加密 PDF

PDF文件创建完成后,使用AES算法对其进行加密:

byte[] pdfBytes = File.ReadAllBytes(@"C:\Reports\ConfidentialReport.pdf");
using (Aes aes = Aes.Create())
{
    aes.Key = Encoding.UTF8.GetBytes("abcdefghijklmnop");
    aes.IV = new byte[16];
    using (var encryptor = aes.CreateEncryptor(aes.Key, aes.IV))
    using (var ms = new MemoryStream())
    {
        using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
        {
            cs.Write(pdfBytes, 0, pdfBytes.Length);
        }
        File.WriteAllBytes(@"C:\Reports\ConfidentialReport.encrypted", ms.ToArray());
    }
}

结论

将 IronPDF 与 AES 加密集成可以生成动态、安全的文档,这些文档既可访问又加密。 无论是开发需要安全文档生成的应用程序,还是管理敏感报告,将 IronPDF 与强加密结合可以保护您的数据。 IronPDF 简化了 PDF 的使用,而 AES 能确保内容的安全。

IronPDF 提供了免费试用,便于开发人员在购买前探索其功能。 如果您准备将IronPDF实现到您的项目中,许可证的起价为$999,可一次性购买。

Jacob Mellor,Team Iron 的首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技术官,也是一位开创 C# PDF 技术的有远见的工程师。作为 Iron Software 核心代码库的原始开发者,他从公司成立之初就开始塑造公司的产品架构,与首席执行官 Cameron Rimington 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥。

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

OR
bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥。
无需信用卡或创建账户
C# 用于 PDF 的 NuGet 库
通过 NuGet 安装

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解决方案资源管理器中,右键点击引用,管理 NuGet 包
  2. 选择浏览并搜索 “IronPDF”
  3. 选择包并安装
C# PDF DLL
下载 DLL

版本: 2026.9

或在此处下载 Windows 安装程序。

  1. 下载并解压 IronPDF 到您的解决方案目录中的 ~/Libs 之类的位置
  2. 在 Visual Studio 解决方案资源管理器中,右键点击引用。选择浏览,“IronPDF.dll”

$999 起