ZhiYi/ZhiYi.Core.Application/Shared/EncryptProvider.cs

81 lines
2.7 KiB
C#

namespace ZhiYi.Core.Application.Shared
{
public class EncryptProvider
{
/// <summary>
/// AES 加密
/// </summary>
/// <param name="data">Raw data</param>
/// <param name="key">Key, requires 32 bits</param>
/// <returns>Encrypted string</returns>
public string AESEncrypt(string data, string key)
{
using MemoryStream memory = new MemoryStream();
using Aes aes = Aes.Create();
byte[] plainBytes = Encoding.UTF8.GetBytes(data);
byte[] bKey = new byte[32];
Array.Copy(Encoding.UTF8.GetBytes(key.PadRight(bKey.Length)), bKey, bKey.Length);
aes.Mode = CipherMode.ECB;
aes.Padding = PaddingMode.PKCS7;
aes.KeySize = 256;
aes.Key = bKey;
using CryptoStream cryptoStream = new CryptoStream(memory, aes.CreateEncryptor(), CryptoStreamMode.Write);
try
{
cryptoStream.Write(plainBytes, 0, plainBytes.Length);
cryptoStream.FlushFinalBlock();
return Convert.ToBase64String(memory.ToArray());
}
catch
{
throw;
}
}
/// <summary>
/// AES 解密
/// </summary>
/// <param name="data">Encrypted data</param>
/// <param name="key">Key, requires 32 bits</param>
/// <returns>Decrypted string</returns>
public string AESDecrypt(string data, string key)
{
byte[] encryptedBytes = Convert.FromBase64String(data);
byte[] bKey = new byte[32];
Array.Copy(Encoding.UTF8.GetBytes(key.PadRight(bKey.Length)), bKey, bKey.Length);
try
{
byte[]? decryptedData = null; // decrypted data
using MemoryStream memory = new MemoryStream(encryptedBytes);
using Aes aes = Aes.Create();
aes.Mode = CipherMode.ECB;
aes.Padding = PaddingMode.PKCS7;
aes.KeySize = 256;
aes.Key = bKey;
using CryptoStream decryptor = new CryptoStream(memory, aes.CreateDecryptor(), CryptoStreamMode.Read);
using MemoryStream tempMemory = new MemoryStream();
byte[] buffer = new byte[1024];
int readBytes = 0;
while ((readBytes = decryptor.Read(buffer, 0, buffer.Length)) > 0)
{
tempMemory.Write(buffer, 0, readBytes);
}
decryptedData = tempMemory.ToArray();
return Encoding.UTF8.GetString(decryptedData);
}
catch
{
throw;
}
}
}
}