在C#中,对字符串进行加密和解密是常见的需求,尤其是在需要保护数据安全或在网络传输中确保数据不被轻易读取时。下面将介绍几种常见的加密解密方法:
1. 使用System.Security.Cryptography
命名空间
加密
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public static string EncryptString(string plainText, string passPhrase)
{
byte[] iv = new byte[16]; // 初始化向量,AES需要16字节
byte[] array;
using (Aes aes = Aes.Create())
{
aes.Key = Encoding.UTF8.GetBytes(passPhrase); // 使用密码生成密钥
aes.IV = iv; // 使用随机生成的IV
aes.Mode = CipherMode.CBC; // 使用CBC模式
aes.Padding = PaddingMode.PKCS7; // 使用PKCS7填充模式
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
using (MemoryStream memoryStream = new MemoryStream())
{
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter streamWriter = new StreamWriter(cryptoStream))
{
streamWriter.Write(plainText);
}
array = memoryStream.ToArray();
}
}
}
return Convert.ToBase64String(array); // 返回Base64编码的加密字符串
}
解密
public static string DecryptString(string cipherText, string passPhrase)
{
byte[] iv = new byte[16]; // 初始化向量,AES需要16字节
byte[] buffer = Convert.FromBase64String(cipherText); // 将Base64字符串转换为字节数组
using (Aes aes = Aes.Create())
{
aes.Key = Encoding.UTF8.GetBytes(passPhrase); // 使用密码生成密钥
aes.IV = iv; // 使用随机生成的IV
aes.Mode = CipherMode.CBC; // 使用CBC模式
aes.Padding = PaddingMode.PKCS7; // 使用PKCS7填充模式
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
using (MemoryStream memoryStream = new MemoryStream(buffer))
{
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
{
using (StreamReader streamReader = new StreamReader(cryptoStream))
{
return streamReader.ReadToEnd(); // 返回解密后的字符串
}
}
}
}
}