private void decryptButton_Click(object sender, EventArgs e)
        {
            try
            {
                AudioEncoder decoder = new AudioEncoder();

                if (string.IsNullOrEmpty(encryptedAudioPathTextBox.Text))
                {
                    throw new Exception("Encrypted audio file was not selected");
                }

                decoder.WavToBytes(encryptedAudioPathTextBox.Text);

                byte[] message = decoder.RemoveMessage();

                if (string.IsNullOrEmpty(encryptionKeyTextBox.Text))
                {
                    throw new Exception("Generation key was not provided");
                }

                string key_text = encryptionKeyTextBox.Text.Trim();

                if (key_text.Length != 32)
                {
                    throw new Exception("Invalid generation key provided");
                }

                var key = new byte[16];
                for (int i = 0; i < 32; i += 2)
                {
                    key[i / 2] = Convert.ToByte(key_text.Substring(i, 2), 16);
                }

                string result = decoder.DecryptMessage(message, key);

                recoveredMessageTextBox.Text = result;
            }
            catch (Exception ex)
            {
                //write message to status bar
            }
        }
        private void EncryptAndEncode(string encodedFilePath)
        {
            try
            {
                var random = new RNGCryptoServiceProvider();
                var key    = new byte[16];
                random.GetBytes(key);

                string key_text = string.Empty;
                foreach (byte b in key)
                {
                    key_text += string.Format("{0:x2}", b);
                }
                generatedKeyTextBox.Text = key_text;

                AudioEncoder encoder = new AudioEncoder();

                if (string.IsNullOrEmpty(loadedFilePathTextBox.Text))
                {
                    throw new Exception("Base file was not selected");
                }

                encoder.WavToBytes(loadedFilePathTextBox.Text);

                if (string.IsNullOrEmpty(plaintextTextBox.Text))
                {
                    throw new Exception("Message was not provided");
                }

                byte[] encrypted = encoder.EncryptMessage(plaintextTextBox.Text, key);
                encoder.AddMessage(encrypted);
                encoder.BytesToWav(encodedFilePath);
            }
            catch (Exception ex)
            {
                //write message to status bar or whatever
            }
        }