using System.Security.Cryptography;
public static void Main()
string original = "xDW3uGurnbVpfG+Xmk7gVcTIYogg0c+unZonNySha3E8hg7henwraJSN91QvErx1E+93qy8LTKlJpvqt9qLKmRlyhH4S/WSoPclfyRv/PCr148cZFKHsSrab80TLMebXmMmc8YZCzNCInP9hXrAaJatzFxbuiE+Dsdsk9bBBzYkKut7BICl5nx5YTsk0KjEpOoQh4Ou+AvgxcYciZpwXwXqHXMvDC63MouEO9/FHjNjv3msWSdBAykpN2IPy+V28TfnL8Ze0Ot8dTUtSvny7/CcQLomLvlX1pMjxZqFP0xjzewQMa5vTLHDR4FQd/gYgjQc5WcsR3pEirm0tV6V1Ex3Nixtzg4H4AAPrjR9RH2xz/3hTGphngVp95ecxRCal0CqL5dlCbVsCPjdlRJk5pSkRqwx3oguM0A83l7ZLtDi7H51mZoWKxUaNeDH6MoD2NsCGaNWgsE/GE52djW8xAmSJsbTwWVK6vuta7KtQHazU3Ka0wylTEhnh3a6if6iwdB22n9erozbfIBwOKdfp4++nekOYBmMIOQ8SvVBjxedyfl6KlBOs/s7JAcLmH+30GM4/4ZCV4429H/+LC+T7kvYISzhELFEIramiWw0XwKaSqz2Inlza7va10giF4HI3+hWksSvdMSz/LAZr/zK9dFbKd1z2GhJNe4CROCDQSkSSn8sFHcii/sZUvzr2Kw7T654ONqnZX8npau5X3DaCDFLXEEvA0sRElRvygOhw3vUxYpMGPqOzl7Iy080iLGI1P+oedyRH5H3M1HAI/gYAnQ==";
Console.WriteLine("Round Trip: {0}", LZString.DecompressFromEncodedURIComponent(Decrypt(pw, original)));
private static byte[][] GetHashKeys(string key)
byte[][] result = new byte[2][];
Encoding enc = Encoding.UTF8;
SHA256 sha2 = new SHA256CryptoServiceProvider();
byte[] rawKey = enc.GetBytes(key);
byte[] rawIV = enc.GetBytes(key);
byte[] hashKey = sha2.ComputeHash(rawKey);
byte[] hashIV = sha2.ComputeHash(rawIV);
Array.Resize(ref hashIV, 16);
public static string Decrypt(string key, string data)
byte[][] keys = GetHashKeys(key);
decData = DecryptStringFromBytes_Aes(data, keys[0], keys[1]);
catch (CryptographicException e) {
catch (ArgumentNullException) {
private static string DecryptStringFromBytes_Aes(string cipherTextString, byte[] Key, byte[] IV)
byte[] cipherText = Convert.FromBase64String(cipherTextString);
if (cipherText == null || cipherText.Length <= 0)
throw new ArgumentNullException("cipherText");
if (Key == null || Key.Length <= 0)
throw new ArgumentNullException("Key");
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException("IV");
using (Aes aesAlg = Aes.Create())
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
using (CryptoStream csDecrypt =
new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
plaintext = srDecrypt.ReadToEnd();