using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.IO; using System.Xml; using System.Text.RegularExpressions; public interface IStringUtilities { string Encrypt(string message, string password); string Decrypt(string encryptedMessage, string password); } public class Solution : IStringUtilities { public string Encrypt(string message, string password) { byte[] results; System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding(); var HashProvider = new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(password)); var TDESAlgorithm = new System.Security.Cryptography.TripleDESCryptoServiceProvider(); TDESAlgorithm.Key = TDESKey; TDESAlgorithm.Mode = System.Security.Cryptography.CipherMode.ECB; TDESAlgorithm.Padding = System.Security.Cryptography.PaddingMode.PKCS7; byte[] dataToEncrypt = UTF8.GetBytes(message); try { var encryptor = TDESAlgorithm.CreateEncryptor(); results = encryptor.TransformFinalBlock(dataToEncrypt, 0, dataToEncrypt.Length); } finally { TDESAlgorithm.Clear(); HashProvider.Clear(); } return Convert.ToBase64String(results); } public string Decrypt(string encryptedMessage, string password) { byte[] results; System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding(); var hashProvider = new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] tdesKey = hashProvider.ComputeHash(UTF8.GetBytes(password)); var tdesAlgorithm = new System.Security.Cryptography.TripleDESCryptoServiceProvider(); tdesAlgorithm.Key = tdesKey; tdesAlgorithm.Mode = System.Security.Cryptography.CipherMode.ECB; tdesAlgorithm.Padding = System.Security.Cryptography.PaddingMode.PKCS7; byte[] dataToDecrypt = Convert.FromBase64String(encryptedMessage); try { System.Security.Cryptography.ICryptoTransform decryptor = tdesAlgorithm.CreateDecryptor(); results = decryptor.TransformFinalBlock(dataToDecrypt, 0, dataToDecrypt.Length); } finally { tdesAlgorithm.Clear(); hashProvider.Clear(); } return UTF8.GetString(results); } }