using System; using System.IO; using System.Security.Cryptography; using System.Text; using Gestor.Common.Helpers; namespace Gestor.Common.Security; public class Token { private readonly byte[] _key = new byte[32] { 45, 103, 73, 146, 210, 184, 220, 224, 94, 3, 114, 60, 211, 119, 21, 100, 18, 201, 230, 195, 119, 252, 73, 208, 209, 39, 222, 48, 47, 142, 94, 24 }; private readonly byte[] _initializationVector = new byte[16] { 95, 17, 151, 243, 209, 243, 119, 80, 63, 252, 13, 180, 162, 13, 23, 218 }; private static readonly byte[] Salt = new byte[16] { 38, 220, 255, 0, 173, 237, 122, 238, 197, 254, 7, 175, 77, 8, 34, 60 }; public bool VerifyToken(string authHeader) { try { if (!authHeader.Contains("Token")) { return false; } string ecryptedText = authHeader.Replace("Token ", ""); return DefaultDecryption(ecryptedText); } catch (Exception) { return false; } } public string DefaultEncryption(long clientId, long providerId) { string plainText = $"{providerId}:{Functions.GetNetworkTime().ToUniversalTime().Ticks}"; return Encrypt(plainText); } public bool DefaultDecryption(string ecryptedText) { string[] textDecrypted = Decrypt(ecryptedText).Split(new char[1] { ':' }); return DefaultVerification(textDecrypted); } public bool DefaultVerification(string[] textDecrypted) { if (textDecrypted.Length < 2) { return false; } return new DateTime(long.Parse(textDecrypted[1]), DateTimeKind.Utc).Date.AddHours(5.0) >= Functions.GetNetworkTime().ToUniversalTime().Date; } public string Encrypt(string plainText) { byte[] inArray; using (AesCryptoServiceProvider aesCryptoServiceProvider = new AesCryptoServiceProvider()) { ICryptoTransform transform = aesCryptoServiceProvider.CreateEncryptor(_key, _initializationVector); using MemoryStream memoryStream = new MemoryStream(); using CryptoStream stream = new CryptoStream(memoryStream, transform, CryptoStreamMode.Write); using (StreamWriter streamWriter = new StreamWriter(stream)) { streamWriter.Write(plainText); } inArray = memoryStream.ToArray(); } return Convert.ToBase64String(inArray); } public string Decrypt(string plainText) { try { byte[] buffer = Convert.FromBase64String(plainText); string result; using (AesCryptoServiceProvider aesCryptoServiceProvider = new AesCryptoServiceProvider()) { ICryptoTransform transform = aesCryptoServiceProvider.CreateDecryptor(_key, _initializationVector); using MemoryStream stream = new MemoryStream(buffer); using CryptoStream stream2 = new CryptoStream(stream, transform, CryptoStreamMode.Read); using StreamReader streamReader = new StreamReader(stream2); result = streamReader.ReadToEnd(); } return result; } catch (Exception) { return null; } } public string AggerEncrypt(string plain) { string password = "aGG3r" + Convert.ToString(1012) + "#w3BDz$"; byte[] bytes = Encoding.UTF8.GetBytes(plain); Rijndael rijndael = Rijndael.Create(); Rfc2898DeriveBytes rfc2898DeriveBytes = new Rfc2898DeriveBytes(password, Salt); rijndael.Key = rfc2898DeriveBytes.GetBytes(32); rijndael.IV = rfc2898DeriveBytes.GetBytes(16); MemoryStream memoryStream = new MemoryStream(); CryptoStream cryptoStream = new CryptoStream(memoryStream, rijndael.CreateEncryptor(), CryptoStreamMode.Write); cryptoStream.Write(bytes, 0, bytes.Length); cryptoStream.Close(); return Convert.ToBase64String(memoryStream.ToArray()); } public string AggerDecrypt(string cipher) { string password = "aGG3r" + Convert.ToString(1012) + "#w3BDz$"; byte[] array = Convert.FromBase64String(cipher); Rijndael rijndael = Rijndael.Create(); Rfc2898DeriveBytes rfc2898DeriveBytes = new Rfc2898DeriveBytes(password, Salt); rijndael.Key = rfc2898DeriveBytes.GetBytes(32); rijndael.IV = rfc2898DeriveBytes.GetBytes(16); MemoryStream memoryStream = new MemoryStream(); CryptoStream cryptoStream = new CryptoStream(memoryStream, rijndael.CreateDecryptor(), CryptoStreamMode.Write); cryptoStream.Write(array, 0, array.Length); cryptoStream.Close(); byte[] bytes = memoryStream.ToArray(); return Encoding.UTF8.GetString(bytes); } }