使用方法:
调用 Encrypt 方法将明文加密为密文。例如: string ciphertext = EllipseEncryption.Encrypt("hello world");。
调用 Decrypt 方法将密文解密为明文。例如: string plaintext = EllipseEncryption.Decrypt(ciphertext);。
using System; // 引入System命名空间,包含基础类库
using System.Security.Cryptography; // 引入System.Security.Cryptography命名空间,包含加密解密类库
using System.Text; // 引入System.Text命名空间,包含字符串处理类库
public class EllipseEncryption // 定义一个名为EllipseEncryption的公共类
{
private static readonly byte[] Key = Encoding.ASCII.GetBytes("mysecretkey"); // 定义一个私有的静态只读字节数组Key,并赋初值为"mysecretkey"的ASCII编码
// 这里的Key用于加密和解密过程中作为对称密钥使用
private static readonly byte[] IV = Encoding.ASCII.GetBytes("1234567890123456"); // 定义一个私有的静态只读字节数组IV,并赋初值为"1234567890123456"的ASCII编码
// 这里的IV用于加密和解密过程中作为初始向量使用,在AES加密中,IV需要固定且每批次不同
public static string Encrypt(string plaintext) // 定义一个公共的静态方法Encrypt,接收一个字符串参数plaintext,返回一个字符串结果
{
byte[] plaintextBytes = Encoding.ASCII.GetBytes(plaintext); // 将输入的明文字符串转换为ASCII编码的字节数组
// 这里将字符串转换为字节数组,是为了后续的加密操作
using (Aes aes = Aes.Create()) // 使用Aes类创建一个AES对象,并自动处理其Dispose操作
{
aes.Key = Key; // 设置AES对象的密钥为之前定义的Key
aes.IV = IV; // 设置AES对象的初始向量为之前定义的IV
// 这里设置AES对象的关键参数,用于后续的加密和解密操作
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV); // 创建一个用于加密的ICryptoTransform对象,并自动处理其Dispose操作
// 这里使用AES对象创建了一个用于加密的对象,该对象将使用之前设置的密钥和初始向量进行加密操作
using (MemoryStream msEncrypt = new MemoryStream()) // 创建一个MemoryStream对象msEncrypt,用于存储加密结果
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) // 创建一个CryptoStream对象csEncrypt,用于将加密数据写入到msEncrypt中
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) // 创建一个StreamWriter对象swEncrypt,用于将数据写入到csEncrypt中
{
swEncrypt.Write(plaintext); // 将明文数据写入到swEncrypt中,即进行加密操作
}
return Convert.ToBase64String(msEncrypt.ToArray()); // 将加密结果从字节数组转换为Base64字符串,并返回结果
}
}
}
}
public static string Decrypt(string ciphertext) // 定义一个公共的静态方法Decrypt,接收一个字符串参数ciphertext,返回一个字符串结果
{
byte[] ciphertextBytes = Convert.FromBase64String(ciphertext); // 将输入的密文字符串转换为字节数组
// 这里将字符串转换为字节数组,是为了后续的解密操作,因为加密后的结果是字节数组形式存储的
using (Aes aes = Aes.Create()) // 使用Aes类创建一个AES对象,并自动处理其Dispose操作
{
aes.Key = Key; // 设置AES对象的密钥为之前定义的Key
aes.IV = IV; // 设置AES对象的初始向量为之前定义的IV
// 这里设置AES对象的关键参数,用于后续的解密操作,与加密操作的参数相同
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV); // 创建一个用于解密的ICryptoTransform对象,并自动处理其Dispose操作
// 这里使用AES对象创建了一个用于解密的对象,该对象将使用之前设置的密钥和初始向量进行解密操作
using (MemoryStream msDecrypt = new MemoryStream(ciphertextBytes)) // 创建一个MemoryStream对象msDecrypt,用于读取加密数据到字节数组中
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) // 创建一个CryptoStream对象csDecrypt,用于读取msDecrypt中的数据并解密到csDecrypt中
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
return srDecrypt.ReadToEnd();
}
}
}
}
}
}
特此记录
anlog
2023年11月13日