using System; using System.IO; using System.Runtime.CompilerServices; using System.Security.Cryptography; using System.Text; namespace Gestor.Common.Helpers { public static class EncryptionHelper { private readonly static byte[] Salt; private readonly static string EncryptionKey; static EncryptionHelper() { EncryptionHelper.Salt = new byte[] { 38, 220, 255, 0, 173, 237, 122, 238, 197, 254, 7, 175, 77, 8, 34, 60 }; EncryptionHelper.EncryptionKey = string.Format("aGG3r{0}#w3BDz$", 1012); } public static string Decrypt(this string cipher) { string str; if (string.IsNullOrEmpty(cipher)) { return null; } try { byte[] numArray = Convert.FromBase64String(cipher); if ((int)numArray.Length >= 16) { byte[] numArray1 = numArray.DecryptBytes(); str = (numArray1 == null ? cipher : Encoding.UTF8.GetString(numArray1)); } else { str = cipher; } } catch (Exception exception) { str = cipher; } return str; } public static byte[] DecryptBytes(this byte[] plainTextBytes) { byte[] array; try { using (Rfc2898DeriveBytes rfc2898DeriveByte = new Rfc2898DeriveBytes(EncryptionHelper.EncryptionKey, EncryptionHelper.Salt)) { using (Rijndael bytes = Rijndael.Create()) { bytes.Key = rfc2898DeriveByte.GetBytes(32); bytes.IV = rfc2898DeriveByte.GetBytes(16); using (MemoryStream memoryStream = new MemoryStream()) { using (CryptoStream cryptoStream = new CryptoStream(memoryStream, bytes.CreateDecryptor(), CryptoStreamMode.Write)) { cryptoStream.Write(plainTextBytes, 0, (int)plainTextBytes.Length); cryptoStream.FlushFinalBlock(); array = memoryStream.ToArray(); } } } } } catch (Exception exception) { array = null; } return array; } public static string Encrypt(this string plain) { return Convert.ToBase64String(Encoding.UTF8.GetBytes(plain).EncryptBytes()); } public static byte[] EncryptBytes(this byte[] plainTextBytes) { byte[] array; using (Rfc2898DeriveBytes rfc2898DeriveByte = new Rfc2898DeriveBytes(EncryptionHelper.EncryptionKey, EncryptionHelper.Salt)) { using (Rijndael bytes = Rijndael.Create()) { bytes.Key = rfc2898DeriveByte.GetBytes(32); bytes.IV = rfc2898DeriveByte.GetBytes(16); using (MemoryStream memoryStream = new MemoryStream()) { using (CryptoStream cryptoStream = new CryptoStream(memoryStream, bytes.CreateEncryptor(), CryptoStreamMode.Write)) { cryptoStream.Write(plainTextBytes, 0, (int)plainTextBytes.Length); cryptoStream.FlushFinalBlock(); array = memoryStream.ToArray(); } } } } return array; } } }