73 lines
2.2 KiB
C#
73 lines
2.2 KiB
C#
using System.IO;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace Livia.Models;
|
|
//from https://www.c-sharpcorner.com/article/encryption-and-decryption-using-a-symmetric-key-in-c-sharp/
|
|
|
|
public interface IAesOperation
|
|
{
|
|
string EncryptString(string key, string plainText);
|
|
string DecryptString(string key, string cipherText);
|
|
}
|
|
|
|
internal class AesOperation(ILogger logger) : IAesOperation
|
|
{
|
|
public string EncryptString(string key, string plainText)
|
|
{
|
|
try
|
|
{
|
|
byte[] iv = new byte[16];
|
|
byte[] array;
|
|
|
|
using (Aes aes = Aes.Create())
|
|
{
|
|
aes.Key = Encoding.UTF8.GetBytes(key);
|
|
aes.IV = iv;
|
|
|
|
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
|
|
|
|
using MemoryStream memoryStream = new();
|
|
using CryptoStream cryptoStream = new(memoryStream, encryptor, CryptoStreamMode.Write);
|
|
using (StreamWriter streamWriter = new(cryptoStream))
|
|
{
|
|
streamWriter.Write(plainText);
|
|
}
|
|
|
|
array = memoryStream.ToArray();
|
|
}
|
|
|
|
return Convert.ToBase64String(array);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.LogError(e, "Encrypt failed");
|
|
return string.Empty;
|
|
}
|
|
}
|
|
|
|
public string DecryptString(string key, string cipherText)
|
|
{
|
|
try
|
|
{
|
|
byte[] iv = new byte[16];
|
|
byte[] buffer = Convert.FromBase64String(cipherText);
|
|
|
|
using Aes aes = Aes.Create();
|
|
aes.Key = Encoding.UTF8.GetBytes(key);
|
|
aes.IV = iv;
|
|
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
|
|
|
|
using MemoryStream memoryStream = new(buffer);
|
|
using CryptoStream cryptoStream = new(memoryStream, decryptor, CryptoStreamMode.Read);
|
|
using StreamReader streamReader = new(cryptoStream);
|
|
return streamReader.ReadToEnd();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.LogError(e, "Decrypt failed");
|
|
return string.Empty;
|
|
}
|
|
}
|
|
} |