|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Security.Cryptography;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
namespace Infrastructure.Helpers
|
|
|
|
|
{
|
|
|
|
|
public class AESHelper
|
|
|
|
|
{
|
|
|
|
|
//
|
|
|
|
|
// 摘要:
|
|
|
|
|
// 32位处理key
|
|
|
|
|
//
|
|
|
|
|
// 参数:
|
|
|
|
|
// key:
|
|
|
|
|
// 原字节
|
|
|
|
|
private static string GetAesKey(string key)
|
|
|
|
|
{
|
|
|
|
|
int length = key.Length;
|
|
|
|
|
if (length < 32)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < 32 - length; i++)
|
|
|
|
|
{
|
|
|
|
|
key += "0";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return key;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return key[..32];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// 摘要:
|
|
|
|
|
// 使用AES加密字符串
|
|
|
|
|
//
|
|
|
|
|
// 参数:
|
|
|
|
|
// content:
|
|
|
|
|
// 加密内容
|
|
|
|
|
//
|
|
|
|
|
// key:
|
|
|
|
|
// 秘钥
|
|
|
|
|
//
|
|
|
|
|
// vi:
|
|
|
|
|
// 偏移量
|
|
|
|
|
//
|
|
|
|
|
// 返回结果:
|
|
|
|
|
// Base64字符串结果
|
|
|
|
|
public static string AesEncrypt(string content, string key, string vi = "1234567890000000")
|
|
|
|
|
{
|
|
|
|
|
byte[] bytes = Encoding.UTF8.GetBytes(GetAesKey(key));
|
|
|
|
|
byte[] bytes2 = Encoding.UTF8.GetBytes(vi);
|
|
|
|
|
byte[] bytes3 = Encoding.UTF8.GetBytes(content);
|
|
|
|
|
SymmetricAlgorithm symmetricAlgorithm = Aes.Create();
|
|
|
|
|
symmetricAlgorithm.IV = bytes2;
|
|
|
|
|
symmetricAlgorithm.Key = bytes;
|
|
|
|
|
symmetricAlgorithm.Mode = CipherMode.CBC;
|
|
|
|
|
symmetricAlgorithm.Padding = PaddingMode.PKCS7;
|
|
|
|
|
ICryptoTransform cryptoTransform = symmetricAlgorithm.CreateEncryptor();
|
|
|
|
|
byte[] inArray = cryptoTransform.TransformFinalBlock(bytes3, 0, bytes3.Length);
|
|
|
|
|
return Convert.ToBase64String(inArray);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// 摘要:
|
|
|
|
|
// 使用AES解密字符串
|
|
|
|
|
//
|
|
|
|
|
// 参数:
|
|
|
|
|
// content:
|
|
|
|
|
// 内容
|
|
|
|
|
//
|
|
|
|
|
// key:
|
|
|
|
|
// 秘钥
|
|
|
|
|
//
|
|
|
|
|
// vi:
|
|
|
|
|
// 偏移量
|
|
|
|
|
//
|
|
|
|
|
// 返回结果:
|
|
|
|
|
// UTF8解密结果
|
|
|
|
|
public static string AesDecrypt(string content, string key, string vi = "1234567890000000")
|
|
|
|
|
{
|
|
|
|
|
byte[] bytes = Encoding.UTF8.GetBytes(GetAesKey(key));
|
|
|
|
|
byte[] bytes2 = Encoding.UTF8.GetBytes(vi);
|
|
|
|
|
byte[] array = Convert.FromBase64String(content);
|
|
|
|
|
SymmetricAlgorithm symmetricAlgorithm = Aes.Create();
|
|
|
|
|
symmetricAlgorithm.IV = bytes2;
|
|
|
|
|
symmetricAlgorithm.Key = bytes;
|
|
|
|
|
symmetricAlgorithm.Mode = CipherMode.CBC;
|
|
|
|
|
symmetricAlgorithm.Padding = PaddingMode.PKCS7;
|
|
|
|
|
ICryptoTransform cryptoTransform = symmetricAlgorithm.CreateDecryptor();
|
|
|
|
|
byte[] bytes3 = cryptoTransform.TransformFinalBlock(array, 0, array.Length);
|
|
|
|
|
return Encoding.UTF8.GetString(bytes3);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|