C#中使用System.Security.Cryptography.Aes模块进行字符串加密解密
C#中使用System.Security.Cryptography.Aes模块进行字符串加密解密
在C#中,System.Security.Cryptography.Aes是.NET框架提供的一个用于数据加密的类,它实现了AES(高级加密标准)算法。AES算法是一种对称密钥加密算法,它支持128位、192位和256位密钥长度。本文将详细介绍如何在C#中使用System.Security.Cryptography.Aes模块进行字符串的加密和解密。
1. 引入命名空间
我们需要引入System.Security.Cryptography命名空间,以便使用AES类。
using System.Security.Cryptography;
2. 创建加密密钥和初始化向量
在AES加密过程中,我们需要一个密钥和一个初始化向量(IV)。密钥用于加密和解密数据,而IV用于增强加密的安全性。
byte[] key = Encoding.UTF8.GetBytes("your-256-bit-key");
byte[] iv = Encoding.UTF8.GetBytes("your-16-byte-iv");
注意,密钥和IV的长度必须符合AES的要求,256位密钥对应32个字节,IV需要16个字节。
3. 加密字符串
使用AES类进行加密,我们可以使用CreateEncryptor方法来创建一个加密器,然后使用TransformFinalBlock方法来加密数据。
public static string EncryptString(string plainText, byte[] key, byte[] iv)
{
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = key;
aesAlg.IV = iv;
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
byte[] encrypted = encryptor.TransformFinalBlock(
Encoding.UTF8.GetBytes(plainText),
0,
plainText.Length);
return Convert.ToBase64String(encrypted);
}
}
4. 解密字符串
解密过程与加密类似,但使用CreateDecryptor方法来创建解密器。
public static string DecryptString(string cipherText, byte[] key, byte[] iv)
{
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = key;
aesAlg.IV = iv;
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
byte[] decryptedData = decryptor.TransformFinalBlock(
Convert.FromBase64String(cipherText),
0,
cipherText.Length);
return Encoding.UTF8.GetString(decryptedData);
}
}
5. 使用示例
我们可以通过以下方式来使用上述方法进行加密和解密。
string original = "Here is some data to encrypt!";
string encrypted = EncryptString(original, key, iv);
string decrypted = DecryptString(encrypted, key, iv);
Console.WriteLine("Original: " + original);
Console.WriteLine("Encrypted: " + encrypted);
Console.WriteLine("Decrypted: " + decrypted);
通过以上步骤,我们可以看到加密和解密的过程是安全的,并且可以确保数据的保密性。在使用AES加密时,确保密钥和IV的安全是非常重要的,因为任何拥有这些密钥的人都可以解密数据。
总结
System.Security.Cryptography.Aes模块为C#提供了强大的加密功能,通过本文的介绍,您应该能够理解如何在C#中使用AES进行字符串的加密和解密。在实际应用中,请确保密钥和IV的安全,以防止数据被未授权访问。