public static string Decrypt(byte[] encryptedData, string sharedKey, byte[] salt)
        {
            var aesData = encryptedData;
            var password = Encoding.UTF8.GetBytes(sharedKey);
            var md5 = MD5.Create();

            var preKeyLength = password.Length + salt.Length;
            var preKey = new byte[preKeyLength];

            Buffer.BlockCopy(password, 0, preKey, 0, password.Length);
            Buffer.BlockCopy(salt, 0, preKey, password.Length, salt.Length);

            var key = md5.ComputeHash(preKey);
            var preIVLength = key.Length + preKeyLength;
            var preIV = new byte[preIVLength];

            Buffer.BlockCopy(key, 0, preIV, 0, key.Length);
            Buffer.BlockCopy(preKey, 0, preIV, key.Length, preKey.Length);

            var iv = md5.ComputeHash(preIV);
            md5.Clear();

            // Decrypt using AES
            var rijndael = new RijndaelManaged
                               {
                                   Mode = CipherMode.CBC,
                                   Padding = PaddingMode.None,
                                   KeySize = 128,
                                   BlockSize = 128,
                               };

            var rijndaelDecryptor = rijndael.CreateDecryptor(key, iv);
            var clearData = rijndaelDecryptor.TransformFinalBlock(aesData, 0, aesData.Length);
            var clearText = new ASCIIEncoding().GetString(clearData);

            ////When decrypted it comes back with a new line character at the end, whcih it gets rid of
            return clearText.SplitOnNewLine().First();
        }