81 lines
2.7 KiB
C#
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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|