-
密钥和初始化向量:
Key
: 用于 AES 加密的密钥,长度为 32 字节(256 位),使用 UTF-8 编码的字符串。IV
: 初始化向量,长度为 16 字节(128 位),也使用 UTF-8 编码的字符串。
-
IsOpenEncrypt
:- 布尔值,用于控制是否开启加密功能。如果设置为
false
,则不会进行加密或解密操作。
- 布尔值,用于控制是否开启加密功能。如果设置为
-
Encrypt
方法:- 参数:
plainText
(明文字符串)。 - 返回值: 返回加密后的字符串(Base64 编码)。
- 逻辑:
- 如果
IsOpenEncrypt
为false
,直接返回明文。 - 创建一个
Aes
对象,设置密钥和初始化向量。 - 使用
CryptoStream
和StreamWriter
将明文写入流中进行加密。 - 最后,将加密后的字节数组转换为 Base64 字符串并返回。
- 如果
- 参数:
-
Decrypt
方法:- 参数:
cipherText
(密文字符串,Base64 编码)。 - 返回值: 返回解密后的字符串(明文)。
- 逻辑:
- 如果
IsOpenEncrypt
为false
,直接返回密文。 - 创建一个
Aes
对象,设置密钥和初始化向量。 - 使用
CryptoStream
和StreamReader
从流中读取解密数据。 - 返回解密后的明文。
- 如果
- 参数:
详细脚本:
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public static class EncryptionHelper
{
private static readonly byte[] Key = Encoding.UTF8.GetBytes("*****************"); // 32 字节(英文字母)密钥
private static readonly byte[] IV = Encoding.UTF8.GetBytes("*************"); // 16 字节初始化向量
/// <summary>
/// 是否开启加密
/// </summary>
private static bool IsOpenEncrypt=true;
/// <summary>
/// 加密
/// </summary>
/// <param name="plainText"></param>
/// <returns></returns>
public static string Encrypt(string plainText)
{
if (!IsOpenEncrypt) return plainText;
using (Aes aes = Aes.Create())
{
aes.Key = Key;
aes.IV = IV;
using (var encryptor = aes.CreateEncryptor(aes.Key, aes.IV))
using (var msEncrypt = new MemoryStream())
{
using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
using (var swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText);
}
return Convert.ToBase64String(msEncrypt.ToArray());
}
}
}
/// <summary>
/// 解密
/// </summary>
/// <param name="cipherText"></param>
/// <returns></returns>
public static string Decrypt(string cipherText)
{
if (!IsOpenEncrypt) return cipherText;
using (Aes aes = Aes.Create())
{
aes.Key = Key;
aes.IV = IV;
using (var decryptor = aes.CreateDecryptor(aes.Key, aes.IV))
using (var msDecrypt = new MemoryStream(Convert.FromBase64String(cipherText)))
using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
using (var srDecrypt = new StreamReader(csDecrypt))
{
return srDecrypt.ReadToEnd();
}
}
}
}
加密后内容:
解密后内容: