private void btnTextoSalvar_Click(object sender, RoutedEventArgs e)
        {
            if (textoCifrado.Text.Length == 0)
            {
                System.Windows.MessageBox.Show("Não há texto criptografado para ser salvo!",
                                               "Erro");
            }
            else if (!Directory.Exists(edtCaminhoTrocaMensagem.Text))
            {
                System.Windows.MessageBox.Show("Diretório de troca de mensagens não encontrado!",
                                               "Erro");
            }
            else
            {
                string arquivo = "";

                ManipulacaoArquivo manipulacaoarquivo = new ManipulacaoArquivo(rsaBits);
                manipulacaoarquivo.getNomeArquivoMensagemCriptografadaNovo(ref arquivo, edtCaminhoTrocaMensagem.Text);

                if (arquivo != "")
                {
                    manipulacaoarquivo.salvarConteudoEmArquivo(arquivo, textoCifrado.Text);

                    System.Windows.MessageBox.Show("Texto copiado com sucesso em " + arquivo,
                                                   "Gravação em disco");
                }
            }
        }
        private void btnCifrar_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                ManipulacaoArquivo manipulacaoarquivo = new ManipulacaoArquivo(rsaBits);

                if (textoOriginal.Text.Length == 0 ||
                    this.textoOriginal.Text.Length > this.tamanhoTexto)
                {
                    throw new ArgumentException("Digite uma mensagem de até " + tamanhoTexto.ToString() + " caracteres!");
                }

                if (!Directory.Exists(edtCaminhoRepositorio.Text))
                {
                    throw new ArgumentException("Não foi encontrado o caminho do repositório de chaves públicas: " +
                                                edtCaminhoRepositorio.Text);
                }

                string arquivoChavePublica = "";

                manipulacaoarquivo.getNomeArquivoChavePublica(edtCaminhoRepositorio.Text, ref arquivoChavePublica);

                if (arquivoChavePublica != "")
                {
                    Cursor = System.Windows.Input.Cursors.Wait;

                    btnCifrar.Content   = "Aguarde...";
                    btnCifrar.IsEnabled = false;

                    System.Windows.Forms.Application.DoEvents(); // Libera Mensagens do processamento do Windows

                    string xmlChavePublica = manipulacaoarquivo.carregarConteudo(arquivoChavePublica);

                    if (xmlChavePublica != "")
                    {
                        string bitsString = xmlChavePublica.Substring(0, xmlChavePublica.IndexOf("</RSABits>") + 10);
                        xmlChavePublica = xmlChavePublica.Replace(bitsString, ""); // Limpando parte da sring
                        int bits = Convert.ToInt32(bitsString.Replace("<RSABits>", "").Replace("</RSABits>", ""));

                        UtilizacaoRSA rsa = new UtilizacaoRSA(bits);
                        rsa.mensagem = textoOriginal.Text;
                        rsa.xmlChave = xmlChavePublica;

                        textoCifrado.Text  = rsa.Cifrar();
                        textoOriginal.Text = "";
                    }
                }
            }
            catch (Exception E)
            {
                System.Windows.MessageBox.Show(E.Message, "Erro");
            }
            finally
            {
                Cursor              = System.Windows.Input.Cursors.Arrow;
                btnCifrar.Content   = "Cifrar >>";
                btnCifrar.IsEnabled = true;
            }
        }
        private void btnTextoCarregar_Click(object sender, RoutedEventArgs e)
        {
            if (!Directory.Exists(edtCaminhoTrocaMensagem.Text))
            {
                System.Windows.MessageBox.Show("Diretório de troca de mensagens não encontrado!",
                                               "Erro");
            }
            else
            {
                string arquivo = "";

                ManipulacaoArquivo manipulacaoarquivo = new ManipulacaoArquivo(rsaBits);

                manipulacaoarquivo.getNomeArquivoMensagemCriptografadaExistente(ref arquivo, edtCaminhoTrocaMensagem.Text);

                if (arquivo != "")
                {
                    textoCifrado.Text  = manipulacaoarquivo.carregarConteudo(arquivo);
                    textoOriginal.Text = "";
                }
            }
        }
        private void btnDecifrar_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (!Directory.Exists(edtCaminhoRepositorio.Text))
                {
                    throw new Exception("Diretório do caminho do repositório não foi encontrado!");
                }

                ManipulacaoArquivo manipulacaoarquivo = new ManipulacaoArquivo(rsaBits);

                if (textoCifrado.Text.Length == 0)
                {
                    System.Windows.MessageBox.Show("Cole ou carrege algum texto cifrado!", "Erro");
                }
                else
                {
                    string arquivo = "";

                    manipulacaoarquivo.getNomeArquivoChavePrivadaExistente(ref arquivo);

                    if (arquivo != "")
                    {
                        Cursor = System.Windows.Input.Cursors.Wait;

                        btnDecifrar.Content   = "Aguarde...";
                        btnDecifrar.IsEnabled = false;

                        System.Windows.Forms.Application.DoEvents(); // Libera Mensagens do processamento do Windows

                        string xmlChavePrivada = manipulacaoarquivo.carregarConteudo(arquivo);

                        if (xmlChavePrivada != "")
                        {
                            string bitsString = xmlChavePrivada.Substring(0, xmlChavePrivada.IndexOf("</RSABits>") + 10);
                            xmlChavePrivada = xmlChavePrivada.Replace(bitsString, ""); // Limpando parte da sring

                            int bits = Convert.ToInt32(bitsString.Replace("<RSABits>", "").Replace("</RSABits>", ""));

                            UtilizacaoRSA rsa = new UtilizacaoRSA(bits);
                            rsa.mensagem = textoCifrado.Text;
                            rsa.xmlChave = xmlChavePrivada;

                            textoOriginal.Text = rsa.Decifrar();
                            textoCifrado.Text  = "";
                        }
                    }
                }
            }
            catch (Exception E)
            {
                this.textoOriginal.Text = "";
                System.Windows.MessageBox.Show(E.Message, "Erro");
            }
            finally
            {
                Cursor = System.Windows.Input.Cursors.Arrow;
                btnDecifrar.Content   = "<< Decifrar";
                btnDecifrar.IsEnabled = true;
            }
        }
        private void btnGerarChavePrivada_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                ManipulacaoArquivo manipulacaoarquivo = new ManipulacaoArquivo(rsaBits);

                if (!Directory.Exists(edtCaminhoRepositorio.Text))
                {
                    throw new Exception("Diretório do caminho do repositório não foi encontrado!");
                }

                string mensagem = "";

                bool continuarProcesso = true;

                if (rsaBits == 4096)
                {
                    mensagem = "A chave será gerada com tamanho de " + rsaBits.ToString() + " bits!\n" +
                               "Este processo poderá levar alguns segundos.\n" +
                               "Deseja criar nova chave privada?";
                }
                else if (rsaBits == 6144)
                {
                    mensagem = "A chave será gerada com tamanho de " + rsaBits.ToString() + " bits!\n" +
                               "Este processo poderá levar alguns minutos.\n" +
                               "Deseja criar nova chave privada?";
                }

                // se a chave for mais exigir mais tempo pra ser gerada, fazer uma pergunta anterior
                if (mensagem != "")
                {
                    continuarProcesso =
                        System.Windows.MessageBox.Show(mensagem,
                                                       "Confirmação",
                                                       System.Windows.MessageBoxButton.YesNo) == System.Windows.MessageBoxResult.Yes;
                }

                if (continuarProcesso)
                {
                    // nome e path do arquivo onde será gravado cada chave
                    string arquivoChavePrivada = "";
                    string arquivoChavePublica = "";

                    // contém o XML das chaves
                    string chavePrivada = "";
                    string chavePublica = "";

                    UtilizacaoRSA rsa = new UtilizacaoRSA(rsaBits);

                    manipulacaoarquivo.getNomeArquivoChavePrivadaNovo(ref arquivoChavePrivada); // Selecionar novo Arquivo de chave Privada

                    if (arquivoChavePrivada != "")
                    {
                        // Alimentar a variável para apontar onde deve ser gravado a chave Pública
                        arquivoChavePublica = System.IO.Path.ChangeExtension(arquivoChavePrivada, "pub");                               // trocando a extensão
                        arquivoChavePublica = System.IO.Path.GetFileName(arquivoChavePublica);                                          // nome do arquivo sem o path

                        arquivoChavePublica = edtCaminhoRepositorio.Text + System.IO.Path.DirectorySeparatorChar + arquivoChavePublica; // Novo Caminho

                        Cursor = System.Windows.Input.Cursors.Wait;

                        btnGerarChavePrivada.Content   = "Aguarde...";
                        btnGerarChavePrivada.IsEnabled = false;
                        System.Windows.Forms.Application.DoEvents(); // Libera Mensagens do processamento do Windows

                        try
                        {
                            rsa.gerarChavePublicaePrivada(ref chavePrivada, ref chavePublica);

                            manipulacaoarquivo.salvarConteudoEmArquivo(arquivoChavePrivada, chavePrivada);                                        // salvando chave privada no disco removível
                            manipulacaoarquivo.salvarConteudoEmArquivo(System.IO.Path.ChangeExtension(arquivoChavePrivada, "pub"), chavePublica); // salvando chave pública no disco removível (backup)

                            manipulacaoarquivo.salvarConteudoEmArquivo(arquivoChavePublica, chavePublica);                                        // salvando chave pública no repositório

                            System.Windows.MessageBox.Show("Chaves pública e privada foram geradas e gravadas com sucesso!\n" +
                                                           "Atenção: A chave privada deve ser mantida em segurança. Esta em hipótese alguma deve ser divulgada.",
                                                           "Gravação Ok");
                        }
                        catch (Exception E)
                        {
                            System.Windows.MessageBox.Show(E.Message, "Erro");
                        }
                        finally
                        {
                            this.Cursor = System.Windows.Input.Cursors.Arrow;
                        }

                        btnGerarChavePrivada.IsEnabled = true;
                        btnGerarChavePrivada.Content   = "Chave Privada";
                    }
                }
            }
            catch (Exception E)
            {
                System.Windows.MessageBox.Show(E.Message, "Erro");
            }
        }