using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; namespace PrevuAPIUtils { public class EncryptionUtility { static readonly string PasswordHash = "6ACFFE9475614D989873CB421FDD6F55"; static readonly string SaltKey = "79B34E198448417F98F665518598635F"; static readonly string VIKey = "EEDB0E14F82C44DB"; public static string CreateToken(string clientName,DateTime ContractEndDate, string Environment) { string data = clientName + ContractEndDate.ToString("MM/dd/yyyy") + Environment; return Encrypt(data); } public static string Encrypt(string data) { byte[] dataBytes = Encoding.UTF8.GetBytes(data); byte[] keyBytes = new Rfc2898DeriveBytes(PasswordHash, Encoding.ASCII.GetBytes(SaltKey)).GetBytes(256 / 8); AesCryptoServiceProvider aes = new AesCryptoServiceProvider(); var encryptor = aes.CreateEncryptor(keyBytes, Encoding.ASCII.GetBytes(VIKey)); // var symmetricKey = new RijndaelManaged() { Mode = CipherMode.CBC, Padding = PaddingMode.PKCS7}; //var encryptor = symmetricKey.CreateEncryptor(keyBytes, Encoding.ASCII.GetBytes(VIKey)); byte[] cipherTextBytes; using (var memoryStream = new MemoryStream()) { using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) { cryptoStream.Write(dataBytes, 0, dataBytes.Length); cryptoStream.FlushFinalBlock(); cipherTextBytes = memoryStream.ToArray(); cryptoStream.Close(); } memoryStream.Close(); } return Convert.ToBase64String(cipherTextBytes).Replace('+','-').Replace('/','_'); } public static string parseToken(string token) { return Decrypt(token); } public static string Decrypt(string token) { byte[] cipherTextBytes = Convert.FromBase64String(token.Replace('-', '+').Replace('_', '/')); byte[] keyBytes = new Rfc2898DeriveBytes(PasswordHash, Encoding.ASCII.GetBytes(SaltKey)).GetBytes(256 / 8); AesCryptoServiceProvider aes = new AesCryptoServiceProvider(); var decryptor = aes.CreateDecryptor(keyBytes, Encoding.ASCII.GetBytes(VIKey)); //var symmetricKey = new RijndaelManaged() { Mode = CipherMode.CBC, Padding = PaddingMode.PKCS7 }; //var decryptor = symmetricKey.CreateDecryptor(keyBytes, Encoding.ASCII.GetBytes(VIKey)); var memoryStream = new MemoryStream(cipherTextBytes); var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read); byte[] plainTextBytes = new byte[cipherTextBytes.Length]; int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length); memoryStream.Close(); cryptoStream.Close(); return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount).TrimEnd("\0".ToCharArray()); } } }