.NET 帮助 C# AES 加密(开发者如何使用) Jacob Mellor 已更新:2026年2月1日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 LLM副本 LLM副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 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,请遵循以下基本步骤: 使用Aes.Create()创建AES类的实例。 设置密钥、IV 和其他相关参数,如密码模式。 使用 ICryptoTransform 接口加密数据并将其写入 MemoryStream。 使用相同的密钥和 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(); } } } } } } 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(); } } } } } } $vbLabelText $csharpLabel 代码解释 Aes.Create(): 这将创建一个AES加密算法的新实例。 aes.Key: 用于加密和解密的密钥。 它必须是有效大小,如 128 位(16 字节)、192 位或 256 位。 aes.IV: 初始化向量(IV),用于随机化加密过程。 在此示例中,我们使用全零 IV 以简化。 内存流:这使我们能够将加密的数据作为字节流处理。 加密流: 它转换数据流(加密或解密)。 高级示例:使用自定义密钥和 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()); } } } 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()); } } } $vbLabelText $csharpLabel 在这种情况下,每次调用该函数时,我们都会生成一个新密钥和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(); } } } } } 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(); } } } } } $vbLabelText $csharpLabel 此代码将加密数据解密回原始数据。 与 AES 加密结合使用的 IronPDF IronPDF 是一个简单且开发者友好的 .NET 库,旨在使用简单的 C# 代码生成、编辑和操作 PDF。 它允许开发人员直接从 HTML、CSS 和 JavaScript创建 PDF 文档,这在动态生成报告、发票或其他文档时非常有用。 通过支持合并、分割以及添加密码或数字签名等安全功能,IronPDF 是 .NET 应用程序中全面的 PDF 生成解决方案。 将 IronPDF 与 AES 加密集成 当您生成敏感报告或文档时,可能需要确保在共享之前对 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"); 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"); $vbLabelText $csharpLabel 步骤 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()); } } 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()); } } $vbLabelText $csharpLabel 结论 将 IronPDF 与 AES 加密集成可以生成动态、安全的文档,这些文档既可访问又加密。 无论是开发需要安全文档生成的应用程序,还是管理敏感报告,将 IronPDF 与强加密结合可以保护您的数据。 IronPDF 简化了 PDF 的使用,而 AES 能确保内容的安全。 IronPDF 提供了免费试用,便于开发人员在购买前探索其功能。 如果您准备将IronPDF应用到您的项目中,许可证的起始价格为一次性支付$799。 常见问题解答 如何在C#中将HTML转换为PDF? 你可以使用IronPDF的RenderHtmlAsPdf方法将HTML字符串转换为PDF。你还可以使用RenderHtmlFileAsPdf将HTML文件转换为PDF。 什么是 AES 加密,如何在 C# 中使用? AES(高级加密标准)是一种用于保护数据的对称加密算法。在 C# 中,AES 加密使用 System.Security.Cryptography 命名空间中的 AES 类实现。您可以创建一个 AES 实例,设置密钥和 IV 参数,并使用 ICryptoTransform 接口加密和解密数据。 在 AES 加密中使用密码分组链接 (CBC) 模式有什么好处? 密码分组链接 (CBC) 模式通过确保相同的明文分组产生不同的密文分组来增强安全性。这是通过使用初始化向量 (IV) 来链接分组的加密来实现的。 如何在 C# 中使用 AES 加密 PDF 文档? 要在 C# 中使用 AES 加密 PDF,可以利用 IronPDF 来处理 PDF 文件,然后通过在写入加密数据到新文件之前,用指定的密钥和 IV 加密 PDF 字节来应用 AES 加密。 在 C# 应用程序中实施 AES 加密涉及哪些步骤? 要在 C# 中实施 AES 加密,您需要创建一个 AES 实例,设置密钥和 IV,创建一个加密器,并使用 MemoryStream 和 CryptoStream 转换数据。 我可以在 C# 中为 AES 加密使用自定义密钥和 IV 吗? 是的,在 AES 加密中,您可以指定自定义密钥和 IV 来增强安全性。建议为每次加密会话生成随机值以提供更好的保护。 开发人员如何在 C# 中增强 PDF 文档的安全性? 开发人员可以使用 IronPDF 结合 AES 加密来增强 C# 中 PDF 文档的安全性,允许创建、编辑和保护 PDF,包括添加密码和数字签名。 IronPDF 如何在共享之前帮助保护 PDF 内容? IronPDF 在共享之前通过允许开发人员使用 AES 加密来帮助保护 PDF 内容。该过程包括生成、编辑和操作具有加密方法的 PDF 文件以确保数据保护。 在 AES 加密中,密钥管理为什么很重要? 在 AES 加密中,密钥管理至关重要,因为加密数据的安全性在很大程度上依赖于加密密钥的保密性和强度。适当的管理可以防止未经授权访问。 对于 C# 开发人员来说,IronPDF 库的关键功能是什么? IronPDF 库允许 C# 开发人员轻松创建、编辑和操作 PDF 文档。它支持合并、拆分和使用加密保护 PDF 等功能,增强了文档管理和安全性。 Jacob Mellor 立即与工程团队聊天 首席技术官 Jacob Mellor 是 Iron Software 的首席技术官,也是一位开创 C# PDF 技术的有远见的工程师。作为 Iron Software 核心代码库的原始开发者,他从公司成立之初就开始塑造公司的产品架构,与首席执行官 Cameron Rimington 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。Jacob 拥有曼彻斯特大学土木工程一级荣誉工程学士学位(BEng)(1998-2001 年)。他的旗舰产品 IronPDF 和 Iron Suite for .NET 库在全球的 NuGet 安装量已超过 3000 万次,其基础代码继续为全球使用的开发人员工具提供动力。Jacob 拥有 25 年的商业经验和 41 年的编码专业知识,他一直专注于推动企业级 C#、Java 和 Python PDF 技术的创新,同时指导下一代技术领导者。 相关文章 已更新2026年2月20日 架起 CLI 简洁性与 .NET 的桥梁:使用 IronPDF for .NET 的 Curl DotNet Jacob Mellor 通过 CurlDotNet 填补了这一空白,CurlDotNet 库的创建是为了将 cURL 的熟悉感带入 .NET 生态系统。 阅读更多 已更新2025年12月20日 RandomNumberGenerator C# 使用 RandomNumberGenerator C# 类可以帮助将您的 PDF 生成和编辑项目提升到一个新的高度。 阅读更多 已更新2025年12月20日 C# String Equals(开发者用法) 与强大的 PDF 库 IronPDF 结合使用,切换模式匹配允许您为文档处理构建更智能、更简洁的逻辑。 阅读更多 C# try catch finally(开发者用法)C# HttpClient(开发者用法)
已更新2026年2月20日 架起 CLI 简洁性与 .NET 的桥梁:使用 IronPDF for .NET 的 Curl DotNet Jacob Mellor 通过 CurlDotNet 填补了这一空白,CurlDotNet 库的创建是为了将 cURL 的熟悉感带入 .NET 生态系统。 阅读更多
已更新2025年12月20日 RandomNumberGenerator C# 使用 RandomNumberGenerator C# 类可以帮助将您的 PDF 生成和编辑项目提升到一个新的高度。 阅读更多