using MEU.API.Config; //using MEU.API.Models; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using EncryptDataLib; namespace MEU.API.Utils { public class CryptoUtils { private static String encryptDataKey = ConfigEnvironment.DATA_ENCRYPTED_KEY; public static string CalculateMD5Hash(string input) { // step 1, calculate MD5 hash from input MD5 md5 = System.Security.Cryptography.MD5.Create(); byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input); byte[] hash = md5.ComputeHash(inputBytes); // step 2, convert byte array to hex string StringBuilder sb = new StringBuilder(); for (int i = 0; i < hash.Length; i++) { sb.Append(hash[i].ToString("X2")); } return sb.ToString(); } protected static string Encrypt(string text, string keyString) { var key = Encoding.UTF8.GetBytes(keyString); using (var aesAlg = Aes.Create()) { using (var encryptor = aesAlg.CreateEncryptor(key, aesAlg.IV)) { using (var msEncrypt = new MemoryStream()) { using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) using (var swEncrypt = new StreamWriter(csEncrypt)) { swEncrypt.Write(text); } var iv = aesAlg.IV; var decryptedContent = msEncrypt.ToArray(); var result = new byte[iv.Length + decryptedContent.Length]; Buffer.BlockCopy(iv, 0, result, 0, iv.Length); Buffer.BlockCopy(decryptedContent, 0, result, iv.Length, decryptedContent.Length); return Convert.ToBase64String(result); } } } } protected static string Decrypt(string cipherText, string keyString) { var fullCipher = Convert.FromBase64String(cipherText); var iv = new byte[16]; var cipher = new byte[fullCipher.Length - iv.Length]; //changes here Buffer.BlockCopy(fullCipher, 0, iv, 0, iv.Length); // Buffer.BlockCopy(fullCipher, iv.Length, cipher, 0, cipher.Length); Buffer.BlockCopy(fullCipher, iv.Length, cipher, 0, fullCipher.Length - iv.Length); // changes here var key = Encoding.UTF8.GetBytes(keyString); using (var aesAlg = Aes.Create()) { using (var decryptor = aesAlg.CreateDecryptor(key, iv)) { string result; using (var msDecrypt = new MemoryStream(cipher)) { using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) { using (var srDecrypt = new StreamReader(csDecrypt)) { result = srDecrypt.ReadToEnd(); } } } return result; } } } public static String EncryptData(String data) { return CryptoUtils.Encrypt(data, CryptoUtils.encryptDataKey); } public static String EncodeBase64(String data) { byte[] encodedBytes = System.Text.Encoding.UTF8.GetBytes(data); return Convert.ToBase64String(encodedBytes); } public static String DecodeBase64(String data) { var base64EncodedBytes = System.Convert.FromBase64String(data); return System.Text.Encoding.UTF8.GetString(base64EncodedBytes); } public static String DecryptData(String encryptedData) { return CryptoUtils.Decrypt(encryptedData, CryptoUtils.encryptDataKey); } } }