96 lines
3.3 KiB
C#
96 lines
3.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Api.Framework.Tools
|
|
{
|
|
public class AesHelper
|
|
{
|
|
/// <summary>
|
|
/// 有密码的AES加密
|
|
/// </summary>
|
|
/// <param name="text">加密字符</param>
|
|
/// <param name="password">加密的密码</param>
|
|
/// <returns></returns>
|
|
public static string Encrypt(string toEncrypt, string key)
|
|
{
|
|
if (key.Length > 32)
|
|
{
|
|
key = key.Substring(0, 32);
|
|
}
|
|
try
|
|
{
|
|
byte[] keyArray = Encoding.UTF8.GetBytes(key);
|
|
byte[] toEncryptArray = Encoding.UTF8.GetBytes(toEncrypt);
|
|
RijndaelManaged rDel = new RijndaelManaged();
|
|
rDel.Key = keyArray;
|
|
rDel.Mode = CipherMode.ECB;
|
|
rDel.Padding = PaddingMode.PKCS7;
|
|
ICryptoTransform cTransform = rDel.CreateEncryptor();
|
|
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
|
|
return ByteArrayToHexString(resultArray);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return "";
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// AES解密
|
|
/// </summary>
|
|
/// <param name="text"></param>
|
|
/// <param name="password"></param>
|
|
/// <returns></returns>
|
|
public static string Decrypt(string toDecrypt, string key)
|
|
{
|
|
if (key.Length > 32)
|
|
{
|
|
key = key.Substring(0, 32);
|
|
}
|
|
byte[] keyArray = Encoding.UTF8.GetBytes(key);
|
|
byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);
|
|
RijndaelManaged rDel = new RijndaelManaged();
|
|
rDel.Key = keyArray;
|
|
rDel.Mode = CipherMode.ECB;
|
|
rDel.Padding = PaddingMode.PKCS7;
|
|
ICryptoTransform cTransform = rDel.CreateDecryptor();
|
|
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
|
|
return Encoding.UTF8.GetString(resultArray);
|
|
}
|
|
/// <summary>
|
|
/// 将一个byte数组转换成16进制字符串
|
|
/// </summary>
|
|
/// <param name="data"></param>
|
|
/// <returns></returns>
|
|
public static string ByteArrayToHexString(byte[] data)
|
|
{
|
|
StringBuilder sb = new StringBuilder(data.Length * 3);
|
|
foreach (byte b in data)
|
|
{
|
|
sb.Append(Convert.ToString(b, 16).PadLeft(2, '0'));
|
|
}
|
|
return sb.ToString().ToUpper();
|
|
}
|
|
/// <summary>
|
|
/// 将16进制字符串转换成byte数组
|
|
/// </summary>
|
|
/// <param name="hexString"></param>
|
|
/// <returns></returns>
|
|
public static byte[] ByteArrayToHexString(string hexString)
|
|
{
|
|
//将16进制秘钥转成字节数组
|
|
var byteArray = new byte[hexString.Length / 2];
|
|
for (var x = 0; x < byteArray.Length; x++)
|
|
{
|
|
var i = Convert.ToInt32(hexString.Substring(x * 2, 2), 16);
|
|
byteArray[x] = (byte)i;
|
|
}
|
|
return byteArray;
|
|
}
|
|
}
|
|
}
|