Files
2026-07-10 15:25:05 +08:00

119 lines
3.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
namespace LSServerService
{
/// <summary>
/// AES对称加密
/// </summary>
public class AESUtil
{
private static string key = "lserpasebygyc222";
#region AES加解密
/// <summary>
///AES加密(加密步骤)
///1,加密字符串得到2进制数组;
///2,将2进制数组转为16进制;
///3,进行base64编码
/// </summary>
/// <param name="toEncrypt">要加密的字符串</param>
/// <param name="key">密钥</param>
public static string Encrypt(string toEncrypt)
{
if (string.IsNullOrEmpty(toEncrypt)) return "";
byte[] _key = Encoding.ASCII.GetBytes(key);
byte[] _source = Encoding.UTF8.GetBytes(toEncrypt);
Aes aes = Aes.Create("AES");
aes.Mode = CipherMode.ECB;
aes.Padding = PaddingMode.PKCS7;
aes.Key = _key;
ICryptoTransform cTransform = aes.CreateEncryptor();
byte[] cryptData = cTransform.TransformFinalBlock(_source, 0, _source.Length);
string hexCryptString = Hex_2To16(cryptData);
byte[] hexCryptData = Encoding.UTF8.GetBytes(hexCryptString);
return Convert.ToBase64String(hexCryptData);
}
/// <summary>
/// AES解密(解密步骤)
/// 1,将BASE64字符串转为16进制数组
/// 2,将16进制数组转为字符串
/// 3,将字符串转为2进制数据
/// 4,用AES解密数据
/// </summary>
/// <param name="encryptedSource">已加密的内容</param>
/// <param name="key">密钥</param>
public static string Decrypt(string toDecrypt)
{
if (string.IsNullOrEmpty(toDecrypt)) return "";
try
{
byte[] _key = Encoding.ASCII.GetBytes(key);
Aes aes = Aes.Create("AES");
aes.Mode = CipherMode.ECB;
aes.Padding = PaddingMode.PKCS7;
aes.Key = _key;
ICryptoTransform cTransform = aes.CreateDecryptor();
byte[] encryptedData = Convert.FromBase64String(toDecrypt);
string encryptedString = Encoding.UTF8.GetString(encryptedData);
byte[] _source = Hex_16To2(encryptedString);
byte[] originalSrouceData = cTransform.TransformFinalBlock(_source, 0, _source.Length);
return Encoding.UTF8.GetString(originalSrouceData);
}
catch (Exception)
{
return "";
}
}
/// <summary>
/// 2进制转16进制
/// </summary>
static string Hex_2To16(byte[] bytes)
{
string hexString = string.Empty;
Int32 iLength = 65535;
if (bytes != null)
{
StringBuilder strB = new StringBuilder();
if (bytes.Length < iLength)
{
iLength = bytes.Length;
}
for (int i = 0; i < iLength; i++)
{
strB.Append(bytes[i].ToString("X2"));
}
hexString = strB.ToString();
}
return hexString;
}
/// <summary>
/// 16进制转2进制
/// </summary>
static byte[] Hex_16To2(string hexString)
{
if ((hexString.Length % 2) != 0)
{
hexString += " ";
}
byte[] returnBytes = new Byte[hexString.Length / 2];
for (Int32 i = 0; i < returnBytes.Length; i++)
{
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
}
return returnBytes;
}
#endregion
}
}