AES(Advanced Encryption Standard,高级加密标准)作为一种广泛使用的对称加密算法,提供了高效且安全的数据加密和解密功能。C# 作为 .NET 平台上的主要编程语言,提供了丰富的类库来实现 AES 加密与解密。本文将详细介绍如何使用 C# 实现 AES 加密与解密,并提供示例代码,帮助读者快速掌握这一关键技术。
1. AES 加密简介
AES(Advanced Encryption Standard,高级加密标准)是一种对称加密算法,意味着加密和解密使用相同的密钥。AES 支持不同的密钥长度,如 128 位、192 位和 256 位。为了简便起见,本文将使用 128 位密钥(即 16 字节)进行加密。
2. C# 中的 AES 加密与解密
在 C# 中,System.Security.Cryptography 命名空间提供了内置的 AES 加密支持。通过 Aes 类,我们可以轻松实现加密和解密操作。以下是一个完整的示例代码,展示了如何在 C# 中进行 AES 加密和解密。
class Program { private static string key = "1234567890123456"; // 16字节密钥,AES-128 private static string iv = "1234567890123456"; // 16字节IV(初始化向量) // 加密函数 public static string Encrypt(string plainText) { using (Aes aesAlg = Aes.Create()) // 创建AES加密实例 { aesAlg.Key = Encoding.UTF8.GetBytes(key); // 设置密钥 aesAlg.IV = Encoding.UTF8.GetBytes(iv); // 设置初始化向量 ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); // 创建加密器 using (MemoryStream msEncrypt = new MemoryStream()) // 用于存储加密后的数据 { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) // 创建加密数据流 { using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) // 写入加密流 { swEncrypt.Write(plainText); // 写入明文数据 } } // 返回加密后的数据,转换为Base64字符串 return Convert.ToBase64String(msEncrypt.ToArray()); } } } // 解密函数 public static string Decrypt(string cipherText) { using (Aes aesAlg = Aes.Create()) // 创建AES实例 { aesAlg.Key = Encoding.UTF8.GetBytes(key); // 设置密钥 aesAlg.IV = Encoding.UTF8.GetBytes(iv); // 设置初始化向量 ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); // 创建解密器 using (MemoryStream msDecrypt = new MemoryStream(Convert.FromBase64String(cipherText))) // 将Base64字符串转换为字节数组并读取 { using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) // 创建解密数据流 { using (StreamReader srDecrypt = new StreamReader(csDecrypt)) // 从解密流中读取数据 { return srDecrypt.ReadToEnd(); // 返回解密后的明文 } } } } } static void Main(string[] args) { string originalText = "Hello, AES Encryption!"; // 原始明文 Console.WriteLine("Original Text: " + originalText); // 输出原始文本 string encryptedText = Encrypt(originalText); // 加密 Console.WriteLine("Encrypted Text: " + encryptedText); // 输出加密后的文本 string decryptedText = Decrypt(encryptedText); // 解密 Console.WriteLine("Decrypted Text: " + decryptedText); // 输出解密后的文本 Console.ReadKey(); } }
3. 代码详解
密钥和初始化向量(IV):
在 AES 加密中,密钥长度和初始化向量(IV)的长度非常重要。这里使用了 16 字节的密钥(128 位),也使用了 16 字节的 IV。这是 AES-128 加密所需的标准设置。
加密过程:
使用
Aes.Create()
创建 AES 实例。设置密钥 (
Key
) 和初始化向量 (IV
)。使用
CreateEncryptor
创建加密器,接着通过CryptoStream
和MemoryStream
实现数据流的加密。最终将加密后的字节流转换为 Base64 字符串,方便以文本形式存储或传输。
解密过程:
解密过程与加密过程相反。我们使用相同的密钥和 IV,通过
CreateDecryptor
解密数据流,最终恢复原始文本。
4. 示例输出
假设我们加密并解密一段文本 "Hello, AES Encryption!"
,输出将如下所示:
Original Text: Hello, AES Encryption! Encrypted Text: P5/fGFh/sUsYOGYOg7wDIA== Decrypted Text: Hello, AES Encryption!
可以看到,原始文本被成功加密并转换为一个 Base64 编码的字符串,然后又解密回原始的明文。
5. 安全注意事项
在实际应用中,密钥和初始化向量的生成应该更为复杂且具有随机性,以提高加密的安全性。避免使用固定的密钥和 IV,尤其是在生产环境中。
例如,可以使用 RNGCryptoServiceProvider
来生成一个随机的密钥和 IV,而不是手动指定它们。这样可以增强加密的强度,确保每次加密都具有独一无二的安全性。
在线AES加密解密工具:https://www.zhanid.com/tool/aes.html
6. 结语
通过本文的介绍,我们详细了解了如何使用 C# 实现 AES 加密与解密。通过示例代码,读者可以清楚地看到如何生成密钥和初始化向量,以及如何进行数据的加密和解密操作。AES 加密算法的高效性和安全性使其成为保护敏感数据的理想选择。无论是开发桌面应用、Web 应用还是移动应用,掌握 AES 加密与解密技术都是非常重要的。希望本文的内容能够帮助大家更好地理解和应用这一技术,提升应用程序的安全性。
本文来源于#数据的世界01,由@蜜芽 整理发布。如若内容造成侵权/违法违规/事实不符,请联系本站客服处理!
该文章观点仅代表作者本人,不代表本站立场。本站不承担相关法律责任。
如若转载,请注明出处:https://www.zhanid.com/biancheng/2481.html