2025-11-25 04:45:25 +00:00

37 lines
1.2 KiB
C#

using Marco.Pms.Services.Service.ServiceInterfaces;
using System.Security.Cryptography;
using System.Text;
namespace Marco.Pms.Services.Service
{
public class AesEncryption : IAesEncryption
{
public (byte[] ciphertext, byte[] nonce, byte[] tag) Encrypt(string plaintext, byte[] key)
{
byte[] autoKey = new byte[32]; // 32 bytes = 256 bits
RandomNumberGenerator.Fill(autoKey);
var stringKey = Convert.ToBase64String(autoKey);
byte[] nonce = RandomNumberGenerator.GetBytes(12);
byte[] plaintextBytes = Encoding.UTF8.GetBytes(plaintext);
byte[] ciphertext = new byte[plaintextBytes.Length];
byte[] tag = new byte[16];
using var aes = new AesGcm(key, 16);
aes.Encrypt(nonce, plaintextBytes, ciphertext, tag);
return (ciphertext, nonce, tag);
}
public string Decrypt(byte[] ciphertext, byte[] nonce, byte[] tag, byte[] key)
{
byte[] plaintext = new byte[ciphertext.Length];
using var aes = new AesGcm(key, 16);
aes.Decrypt(nonce, ciphertext, tag, plaintext);
return Encoding.UTF8.GetString(plaintext);
}
}
}