.NET 帮助 C# AES 加密(开发者用法) Curtis Chau 已更新:七月 28, 2025 Download IronPDF NuGet 下载 DLL 下载 Windows 安装程序 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article AES(高级加密标准) 是最常用的对称加密算法之一。 它使用相同的密钥来加密和解密数据,使 AES 加密在许多应用程序中能有效快速地保护敏感数据。 本教程将专注于 C# 中的 AES 加密,使用 AES 类来加密和解密数据以及 IronPDF 库。 我们将涵盖实用示例,分步讲解加密过程,并了解如何使用密码块链(CBC)模式增加安全性。 我们还将讨论加密密钥管理和初始化向量(IV)的作用。 C# 中的 AES 加密介绍 高级加密标准(AES)是一种由美国国家标准与技术研究院 (NIST) 标准化的对称加密算法。 该算法可以拥有 128、192 或 256 位的密钥大小,可高度安全地加密机密数据。 它使用相同的加密密钥来加密和解密数据。 AES的工作原理是将原始数据分成区块并对这些区块进行转换。 它以不同的密码模式运行,如 CBC(密码块链)和电子密码本(ECB),每种模式均提供不同的安全特性。 C# 中 AES 的工作原理 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(); } } } } } } Imports System Imports System.IO Imports System.Security.Cryptography Imports System.Text Friend Class Program ' Declare a static byte array for encrypted data Public Shared encryptedData() As Byte ' Main method to demonstrate encryption and decryption Public Shared Sub Main(ByVal args() As String) ' String plaintext to be encrypted Dim plaintext As String = "This is some sensitive data!" Dim key As String = "abcdefghijklmnop" ' 128-bit key (16 characters) ' Encrypt the plaintext Dim ciphertext As String = Encrypt(plaintext, key) Console.WriteLine("Encrypted Data: " & ciphertext) ' Decrypt the ciphertext Dim decryptedData As String = Decrypt(ciphertext, key) Console.WriteLine("Decrypted Data: " & decryptedData) End Sub ' Method to encrypt data Public Shared Function Encrypt(ByVal plaintext As String, ByVal key As String) As String ' Create a new instance of the AES encryption algorithm Using aes As Aes = System.Security.Cryptography.Aes.Create() aes.Key = Encoding.UTF8.GetBytes(key) aes.IV = New Byte(15){} ' Initialization vector (IV) ' Create an encryptor to perform the stream transform Dim encryptor As ICryptoTransform = aes.CreateEncryptor(aes.Key, aes.IV) ' Create the streams used for encryption Using ms As New MemoryStream() ' Create a CryptoStream using the encryptor Using cs As New CryptoStream(ms, encryptor, CryptoStreamMode.Write) Using sw As New StreamWriter(cs) sw.Write(plaintext) End Using End Using ' Store the encrypted data in the public static byte array encryptedData = ms.ToArray() Return Convert.ToBase64String(encryptedData) End Using End Using End Function ' Method to decrypt data Public Shared Function Decrypt(ByVal ciphertext As String, ByVal key As String) As String Using aes As Aes = System.Security.Cryptography.Aes.Create() aes.Key = Encoding.UTF8.GetBytes(key) aes.IV = New Byte(15){} ' Initialization vector (IV) ' Create a decryptor to perform the stream transform Dim decryptor As ICryptoTransform = aes.CreateDecryptor(aes.Key, aes.IV) ' Create the streams used for decryption Using ms As New MemoryStream(Convert.FromBase64String(ciphertext)) Using cs As New CryptoStream(ms, decryptor, CryptoStreamMode.Read) Using sr As New StreamReader(cs) Return sr.ReadToEnd() End Using End Using End Using End Using End Function End Class $vbLabelText $csharpLabel 代码说明 Aes.Create():这将创建 AES 加密算法的新实例。 aes.Key:用于加密和解密的密钥。 它必须是有效大小,如 128 位(16 字节)、192 位或 256 位。 aes.IV:初始化向量 (IV),用于随机化加密过程。 在此示例中,我们使用全零 IV 以简化。 MemoryStream:这允许我们将加密数据作为字节流处理。 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()); } } } 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 Shared Function EncryptData(ByVal plaintext As String) As String Using aes As Aes = Aes.Create() aes.Key = New Byte(31){} ' AES-256 requires a 256-bit key (32 bytes) aes.IV = New Byte(15){} ' 128-bit block size ' Randomly generate key and IV Using rng As RandomNumberGenerator = RandomNumberGenerator.Create() rng.GetBytes(aes.Key) ' Generate a random key rng.GetBytes(aes.IV) ' Generate a random IV End Using ' Create an encryptor to perform the stream transform Dim encryptor As ICryptoTransform = aes.CreateEncryptor(aes.Key, aes.IV) ' Create the streams used for encryption Using ms As New MemoryStream() Using cs As New CryptoStream(ms, encryptor, CryptoStreamMode.Write) Using sw As New StreamWriter(cs) sw.Write(plaintext) End Using End Using Return Convert.ToBase64String(ms.ToArray()) End Using End Using End Function $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(); } } } } } Public Shared Function DecryptData(ByVal ciphertext As String, ByVal key() As Byte, ByVal iv() As Byte) As String Using aes As Aes = Aes.Create() aes.Key = key aes.IV = iv ' Create a decryptor to perform the stream transform Dim decryptor As ICryptoTransform = aes.CreateDecryptor(aes.Key, aes.IV) ' Create the streams used for decryption Using ms As New MemoryStream(Convert.FromBase64String(ciphertext)) Using cs As New CryptoStream(ms, decryptor, CryptoStreamMode.Read) Using sr As New StreamReader(cs) Return sr.ReadToEnd() End Using End Using End Using End Using End Function $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"); Dim htmlContent = "<h1>Confidential</h1><p>This is sensitive data.</p>" Dim renderer = New ChromePdfRenderer() Dim 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()); } } Dim pdfBytes() As Byte = File.ReadAllBytes("C:\Reports\ConfidentialReport.pdf") Using aes As Aes = Aes.Create() aes.Key = Encoding.UTF8.GetBytes("abcdefghijklmnop") aes.IV = New Byte(15){} Using encryptor = aes.CreateEncryptor(aes.Key, aes.IV) Using ms = New MemoryStream() Using cs = New CryptoStream(ms, encryptor, CryptoStreamMode.Write) cs.Write(pdfBytes, 0, pdfBytes.Length) End Using File.WriteAllBytes("C:\Reports\ConfidentialReport.encrypted", ms.ToArray()) End Using End Using End Using $vbLabelText $csharpLabel 结论 将 IronPDF 与 AES 加密集成可以生成动态、安全的文档,这些文档既可访问又加密。 无论是开发需要安全文档生成的应用程序,还是管理敏感报告,将 IronPDF 与强加密结合可以保护您的数据。 IronPDF 简化了 PDF 的使用,而 AES 能确保内容的安全。 IronPDF 提供了免费试用,便于开发人员在购买前探索其功能。 如果您准备将 IronPDF 实施到您的项目中,许可证起价$liteLicense,为一次性购买。 常见问题解答 如何在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 等功能,增强了文档管理和安全性。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已更新九月 4, 2025 RandomNumberGenerator C# 使用 RandomNumberGenerator C# 类可以帮助将您的 PDF 生成和编辑项目提升到一个新的高度。 阅读更多 已更新九月 4, 2025 C# String Equals(开发者用法) 与强大的 PDF 库 IronPDF 结合使用,切换模式匹配允许您为文档处理构建更智能、更简洁的逻辑。 阅读更多 已更新八月 5, 2025 C# Switch 模式匹配(开发者用法) 与强大的 PDF 库 IronPDF 结合使用,切换模式匹配允许您为文档处理构建更智能、更简洁的逻辑。 阅读更多 C# try catch finally(开发者用法)C# HttpClient(开发者用法)
已更新九月 4, 2025 RandomNumberGenerator C# 使用 RandomNumberGenerator C# 类可以帮助将您的 PDF 生成和编辑项目提升到一个新的高度。 阅读更多