using System.IO; using System.Text; using System.Security.Cryptography; using System; using SimpleValidator.Extensions; namespace Tango.Core.Cryptography { /// /// Represents an Rfc2898 Cryptographer. /// /// public class Rfc2898Cryptographer : ICryptographer { /// /// Decrypts the specified text. /// /// The text. /// public string Decrypt(string text) { return Decrypt(text, Properties.Resources.EncryptionPassword); } /// /// Decrypts the specified text using the specified pass key. /// /// The text. /// The key. /// public string Decrypt(string text, string key) { if (text.IsNullOrWhiteSpace()) return text; string EncryptionKey = key; text = text.Replace(" ", "+"); byte[] cipherBytes = Convert.FromBase64String(text); using (Aes encryptor = Aes.Create()) { Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 }); encryptor.Key = pdb.GetBytes(32); encryptor.IV = pdb.GetBytes(16); using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write)) { cs.Write(cipherBytes, 0, cipherBytes.Length); cs.Close(); } text = Encoding.Unicode.GetString(ms.ToArray()); } } return text; } /// /// Encrypts the specified text. /// /// The text. /// public string Encrypt(string text) { return Encrypt(text, Properties.Resources.EncryptionPassword); } /// /// Encrypts the specified text using the specified pass key. /// /// The text. /// The key. /// public string Encrypt(string text, string key) { if (text.IsNullOrWhiteSpace()) return text; string EncryptionKey = key; byte[] clearBytes = Encoding.Unicode.GetBytes(text); using (Aes encryptor = Aes.Create()) { Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 }); encryptor.Key = pdb.GetBytes(32); encryptor.IV = pdb.GetBytes(16); using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write(clearBytes, 0, clearBytes.Length); cs.Close(); } text = Convert.ToBase64String(ms.ToArray()); } } return text; } } }