segunda-feira, 18 de março de 2013

Dica - Visual Studio não instância uma DLL




















Olá amigos, tudo bem? Hoje vou dar uma simples dica relacionado a utilização de DLL no Visual Studio 2010.

Em alguns fóruns, vi algumas pessoas dizendo que adicionam uma DLL no Visual Studio 2010 (Server Explorer > References > Add Reference) e após importar o NameSpace para o projeto, a classe não é exibida no Intelisense, e por mais que seja informada manualmente o projeto não compila, informando que não conseguiu localizar o Assembly.
Isso ocorre porque você não esta utilizando nenhuma versão de Framework, esta utilizando apenas o Client Profile.

Para resolver esse problema, clique no menu superior em "Project", e em seguida selecione a opção "NomeProjeto Properties". Em seguida será exibido as propriedades do projeto, e na aba "Application" que se abre a esquerda, localize a opção "Target Framework" e selecione então o correspondente a sua aplicação.
Compile o projeto e tente novamente fazer a utilização da DLL referenciada e pronto!

Qualquer dúvida, postem aqui.

sexta-feira, 15 de março de 2013

C# - Função para remover acentos



















Fala ai pessoal, tudo em ordem?! Hoje vou postar um código bem usado e bem procurado... Uma função para remover acentos.

string toRemoveAcentos = "Lá hà uma lua tão bela";
const string StrComAcentos = "ÄÅÁÂÀÃäáâàãÉÊËÈéêëèÍÎÏÌíîïìÖÓÔÒÕöóôòõÜÚÛüúûùÇç'";
const string StrSemAcentos = "AAAAAAaaaaaEEEEeeeeIIIIiiiiOOOOOoooooUUUuuuuCc ";
int i = 0;

foreach (Char c in StrComAcentos)
{
    toRemoveAcentos = toRemoveAcentos.Replace(c.ToString().Trim(), StrSemAcentos[i].ToString().Trim());
    i++;
}

O resultado será: "La ha uma lua tao bela".

quinta-feira, 14 de março de 2013

C# - Enviando e-mail pelo GMAIL



















Olá pessoal, hoje vou colocar aqui uma função para o envio de mensagens de e-mail utilizando uma conta do Gmail. Vi em muitos fóruns e artigos, códigos para o envio que não fazem a implementação do SSL, e logo a mensagem não é enviada.

O código parte do principio que sua página possui 4 (quatro) campos do tipo texto box sendo:

  • Nome - txt_nome;
  • Email - txt_email;
  • Telefone - txt_Telefone;
  • Mensagem - txt_mensagem;
O primeiro passo é importar a classe System.Net.Mail (using System.Net.Mail). Mais detalhes sobre essa classe pode ser obtida clicando aqui.

//Definir usuário e senha da conta do Gmail
string sUserName = "email@gmail.com";
string sPassword = "senha";

// montado stringbuilder para corpo da mensagem
StringBuilder CompleteMsg = new StringBuilder();
CompleteMsg.AppendLine("Nome:" + txt_nome.Text);
CompleteMsg.AppendLine("Telefone:" + txt_telefone.Text);
CompleteMsg.AppendLine("Mensagem:" + txt_mensgaem.Text);

// convertendo stringbuilder para string
string CorpoDoEmail = (Convert.ToString(CompleteMsg));
string sBody = CorpoDoEmail;

//Criar o objeto email
MailMessage objEmail = new MailMessage();
objEmail.To.Add(sUserName);
objEmail.From = new MailAddress(txtEmail.Text.Trim());
objEmail.Subject = "Título da mensagem";
objEmail.Body = sBody;

//Criar a função que fará o disparo
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com"; //Servidor 
smtp.Credentials = new System.Net.NetworkCredential(sUserName, sPassword);
smtp.EnableSsl = true;
smtp.Send(objEmail);

quarta-feira, 13 de março de 2013

C# - Função Gerador de Senhas



















Olá pessoal, hoje desenvolvi um código para gerar senhas randômicas. Pode ser utilizado para várias finalidades, como para reset em cadastros de usuário, enfim, o uso da função é por sua conta.

Criei um método que gera a senha, e retorna a string com a senha gerada.

//Definido variável com os caracteres utilizados na geração da senha
private const string SenhaCaracteresValidos = "abcdefghijklmnopqrstuvwxyz1234567890@#!?";
        
public static string CreatePassword()
{
    //Aqui eu defino o número de caracteres que a senha terá
    int tamanho = 8;

    //Aqui pego o valor máximo de caracteres para gerar a senha
    int valormaximo = SenhaCaracteresValidos.Length;

    //Criamos um objeto do tipo randon
    Random random = new Random(DateTime.Now.Millisecond);

    //Criamos a string que montaremos a senha
    StringBuilder senha = new StringBuilder(tamanho);

    //Fazemos um for adicionando os caracteres a senha
    for (int i = 0; i < tamanho; i++)
        senha.Append(SenhaCaracteresValidos[random.Next(0, valormaximo)]);

    //retorna a senha
    return senha.ToString();
}

terça-feira, 12 de março de 2013

C# - Invertendo uma string



















Olá pessoal, hoje vou publicar mais uma função bem simples, e que ficou bem conhecida por usuários que tem o costume de fazer downloads da internet de filmes, programas, e jogos.

Geralmente quando se clica no link para download você é redirecionado para uma página de propaganda, e que deve esperar alguns segundos ou até mesmo minutos para o link de download ser liberado, porém na barra de endereço do site, esta o caminho do link, só que invertido, dando um certo trabalho para reescrever em ordem contrária.
public static string Inverter(string Texto)
{
    //Cria a partir do texto original um array de char
    char[] ArrayChar = Texto.ToCharArray();

    //Com o array criado invertemos a ordem do mesmo
    Array.Reverse(ArrayChar);

    //Agora basta criarmos uma nova String, já com o array invertido.
    return new string(ArrayChar);
}

segunda-feira, 11 de março de 2013

C# - Verificando se é um número Inteiro (int)



















Olá pessoal, vou mostrar um exemplo bem simples para validar se um valor é Inteiro (int) ou não. O mesmo código pode ser usado para validar varáveis do tipo decimal e float.
//Variável que que será testada
string valorVerificar = "90";

//Variável que terá o valor, caso seja inteiro
int valorInteiro; 
            
//Validando se é inteiro utilizando o recurso TryParse
//No método passamos primeiro uma string, e depois a saída "out"
bool isNumeroInteiro = int.TryParse(valorVerificar, out valorInteiro);

//Verificando se é um número
if (isNumeroInteiro)
{
    //Número é inteiro
}
else
{ 
    //Não é um número inteiro
}

domingo, 10 de março de 2013

CSS - Dica para barra de rolagem sempre vísivel



















Olá amigos, bom dia! Mas um domingo e eu aqui postando uma dica bem legal sobre CSS.

Eu já tive esse problema, e como tudo na vida da gente, é errando e quebrando a cabeça que se aprende, achei legal compartilhar isso com vocês. Essa dica, essencialmente é para quem esta iniciando com CSS que vai pegar esse "problema" em breve.

Quando desenvolvemos um site e centralizamos ele na tela, o navegador calcula automaticamente a sobra que tem de haver nos dois lados, para que realmente fique centralizado em qualquer resolução de monitor. Acontece que quando a página é grande o navegador é obrigado a criar a barra de rolagem, fazendo assim que o esqueleto da página seja modificado entre páginas que tem rolagem e que não tem rolagem.

É uma "pequena" mudança, mas além de mudar a disposição visual, na transição da página, aos olhos do usuário parece que muda muita coisa, quando na verdade a única coisa que se altera são as margens da direita e esquerda.

Uma solução que encontrei foi a de colocar a barra de rolagem em todas as páginas, ou seja, independente do tamanho da página (pequena ou grande) sempre exibiremos a barra de rolagem e isso não deixará nunca que seja redimensionado nenhuma margem.

Esse é um código CSS simples, porém que resolveu o meu problema.

html { overflow-y: scroll; }
html { overflow: -moz-scrollbars-vertical; }
html { overflow-x: auto; }

sábado, 9 de março de 2013

Falha ao criar um Banco de Dados no SQL Express



















Olá amigos. Tive um problema ao tentar criar um novo banco de dados pelo Visual Studio 2010. Ele me dava uma mensagem de erro, e não permitia a criação do banco.

A mensagem de erro era:
"Failed to generate a user instance of SQL Server due to a failure in starting the process for the user instance."

Depois de algumas pesquisas, e alguns testes acabei encontrando a solução.

1. O primeiro passo é stopar as instancias do SQL Server Express que estiverem iniciadas. Para isso, clique em "Start" > "Run", e digite "services.msc". Localize a opção "SQL Server (nome da instância)". Clique com o botão direito do mouse e selecione a opção "Stop";
2. Agora temos que excluir os arquivos que estão gerando esse erro. Para isso, clique em "Start" > "Run", e digite "%LOCALAPPDATA%\Microsoft\Microsoft SQL Server Data\" e pressione enter;
3. Logo em seguida será exibido uma janela com uma pasta chamada "SQLEXPRESS", pode apagar essa pasta e todo o seu conteúdo, sem medo de ser feliz.
4. Inicie o serviço que paramos no primeiro passo;

Pronto, agora você já consegue criar uma nova Base de Dados. Se tiverem alguma dúvida ou outro sintoma,  por favor, postem aqui no blog.

Até a próxima.

sexta-feira, 8 de março de 2013

ASP.Net - Dados em um DropDownList e valor Inicial



















Depois de ver em muitos fóruns dúvidas de como popular um "DropDownList" por código (sem utilizar o assistente do Visual Studio) resolvi criar um post mostrando o passo a passo para carregar os dados de um banco de dados, como definir o valor inicial, e pegar o valor posteriormente.

Primeiro crie um projeto no Visual Studio do tipo "Empty ASP Net Web Application". Adicione um WebForm e insira um componente "DropDownList", e nomeie-o como "ddl". Adicione também um botão e nomeie-o como "btValor".

O seu código deverá ficar assim:


Agora já vamos definir o valor inicial do DropDownList. Isso é bem simples, basta adicionar o seguinte código dentro da tag . Teste no navegador.

     

Agora vamos popular o DropDownList com valores de um banco de dados SQL Server. Não vou entrar no mérito das classes de acesso à dados, pois o post é sobre "DropDownList" e não Banco de Dados.

Pressione o botão F7 para acessarmos o Code-Behind da página.

Na aba Solution Explorer adicione um banco de dados SQL e nomeie-o como "data.mdf". Crie uma tabela com o nome de "valor" e insira dois campos:

id - Int (define com identity e chave primária)
descricao - varchar(50)

Agora na aba Server Explorer, Data Connections, clique com o botão direito do mouse na tabela que acabamos de criar (valor), e vamos inserir manualmente alguns valores nessa tabela. Selecione a opção "Show Table Data". Vou colocar: Celular, Mouse, Teclado, e Notebook. Como defini como identidade (identity) os seus códigos serão 1, 2, 3, e 4 respectivamente.

Depois disso vamos popular esses dados que acabamos de inserir no DropDownList. Para isso, no Code-Behind da página vamos criar 2 métodos e chamar um deles no PageLoad.

Primeiro método que vamos criar é o de acesso ao banco de dados para recuperarmos os dados em um DataTable. Para isso importe as classes Data e Data.SqlClient.

private DataTable MontarDataTable(string sql)
        {
            //Definir a ConnectionString
            string connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\data.mdf;Integrated Security=True;User Instance=True";            
            
            //Iniciar o processo de Conexão ao Banco de Dados
            SqlConnection conn = new SqlConnection(connectionString);
            conn.Open();

            //Instanciando o DataAdapter para popular um DataTable
            SqlDataAdapter da = new SqlDataAdapter(sql, conn);
            DataTable dt = new DataTable();
            da.Fill(dt);

            return dt;
        }

Agora vamos criar o método que vai popular o DropDownList.

private void PopularDropDownList()
        {
            //Query que irá retornar os valores do banco de dados
            string sql = "SELECT * FROM valor";

            //DataTable que será populado
            DataTable dt = new DataTable();

            //Populando o DataTable chamando a Função que criamos de acesso à dados
            dt = MontarDataTable(sql);

            //Populando e definindo o DropDownList
            ddl.DataSource = dt;
            ddl.DataTextField = "descricao";
            ddl.DataValueField = "id";
            ddl.DataBind();
        }

Agora temos que chamar esse metódo (PopularDropDownList()) no evento PageLoad da página, para que toda vez que iniciarmos a página ele seja carregado.
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)            
                PopularDropDownList();
        }

Agora compile o seu código e teste no navegador. Os dados já devem ser exibidos no DropDownList, porém ainda falta codificarmos o botão para verificar o valor do DropDownList.
DropDownList C#
Valores Carregados no DropDownList
Vamos inserir um objeto Literal, para exibirmos o valor do item selecionado.



E vamos codificar o botão "btValor", inserindo o seguinte código:
        protected void btValor_Click(object sender, EventArgs e)
        {
            //Pegar o valor do item do DropDownList
            string valor = ddl.SelectedValue.ToString();

            //Verificar se o item selecionado não foi o item "Selecione"
            if (valor == "Selecione")
            {
                lblValorSelecionado.Text = "Nenhum valor foi selecionado";
                return;
            }

            lblValorSelecionado.Text = valor;
        }

Pronto. Agora compile o seu projeto e pode fazer o teste. Selecione um objeto no DropDownList e clique no botão "Valor do DropDown". O valor selecionado deverá aparecer ao lado do botão, conforme a imagem a seguir:
DropDownList
Valor selecionado no DropDownList
Agora já temos a nossa solução finalizada, pegando os valores do DropDownList e exibindo na tela, valores esse que foram obtidos através do Banco de Dados, tudo de forma manual, sem utilizar nenhum assistente do Visual Studio.

Você pode baixar os arquivos desse projeto clicando aqui.

Espero que tenham gostado. Até a próxima.

quinta-feira, 7 de março de 2013

C# - Função contra SQL Injection (Injeção de SQL)



















A Injeção de SQL, mais conhecida através do termo americano SQL Injection, é um tipo de ameaça de segurança que se aproveita de falhas em sistemas que interagem com bases de dados via SQL. A injeção de SQL ocorre quando o atacante consegue inserir uma série de instruções SQL dentro de uma consulta (query) através da manipulação das entradas de dados de uma aplicação. Para mais detalhes sobre SQL Injection clique aqui.

Hoje todas as linguagens de programação já oferecem suporte para passar parâmetros em uma query, ao invés de concatena-la, o que acaba impedindo os ataques de injeção SQL.

Mas paralelo a isso, eu particularmente ainda utilizo bastante a concatenação de strings, para evitar o ataque de Injeção SQL criei uma simples função em C# que elimina os termos que podem ser considerados perigosos para o nosso banco de dados, e vou compartilhar essa função com vocês.
public static string Sanatization(string str)
        { 
            //Função simples para evitar ataques de injeção SQL
            if (str == string.Empty || str == "")
                return str;

            string sValue = str;

            //Valores a serem substituidos
            sValue = sValue.Replace("'", "''");
            sValue = sValue.Replace("--", " ");
            sValue = sValue.Replace("/*", " ");
            sValue = sValue.Replace("*/", " ");
            sValue = sValue.Replace(" or ", "");
            sValue = sValue.Replace(" and ", "");
            sValue = sValue.Replace("update", "");
            sValue = sValue.Replace("-shutdown", "");
            sValue = sValue.Replace("--", "");
            sValue = sValue.Replace("'or'1'='1'", "");
            sValue = sValue.Replace("insert", "");
            sValue = sValue.Replace("drop", "");
            sValue = sValue.Replace("delete", "");
            sValue = sValue.Replace("xp_", "");
            sValue = sValue.Replace("sp_", "");
            sValue = sValue.Replace("select", "");
            sValue = sValue.Replace("1 union select", "");
   
   //Retorna o valor com as devidas alterações
            return sValue;

        }

quarta-feira, 6 de março de 2013

C# - Função para validar um CNPJ



















Vamos ver agora uma função para validar um CNPJ. Assim como a função de validação do CPF, o CNPJ pode ser passado com os caracteres de ".", "/", e "-", pois a função também faz esse tratamento.

Segue o código para validação do CNPJ:

//Validar CNPJ
        public static bool validarCNPJ(string cnpj)
        {

            int[] mt1 = new int[12] { 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
            int[] mt2 = new int[13] { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
            int soma; int resto; string digito; string TempCNPJ;

            cnpj = cnpj.Trim();
            cnpj = cnpj.Replace(".", "").Replace("-", "").Replace("/", "");

            if (cnpj.Length != 14)
                return false;
    
   if (cnpj == "00000000000000" || cnpj == "11111111111111" ||
    cnpj == "22222222222222" || cnpj == "33333333333333" ||
    cnpj == "44444444444444" || cnpj == "55555555555555" ||
    cnpj == "66666666666666" || cnpj == "77777777777777" ||
    cnpj == "88888888888888" || cnpj == "99999999999999")
    return false;

            TempCNPJ = cnpj.Substring(0, 12);
            soma = 0;

            for (int i = 0; i < 12; i++)
                soma += int.Parse(TempCNPJ[i].ToString()) * mt1[i];

            resto = (soma % 11);
            if (resto < 2)
                resto = 0;
            else
                resto = 11 - resto;

            digito = resto.ToString();

            TempCNPJ = TempCNPJ + digito;
            soma = 0;
            for (int i = 0; i < 13; i++)
                soma += int.Parse(TempCNPJ[i].ToString()) * mt2[i];

            resto = (soma % 11);
            if (resto < 2)
                resto = 0;
            else
                resto = 11 - resto;
            digito = digito + resto.ToString();

            return cnpj.EndsWith(digito);
        }

terça-feira, 5 de março de 2013

C# - Função para validar um CPF



















Olá amigos. Ontem postei um código para validação de e-mail, e entrando nessa onde vou postar aqui a validação de CPF. O processo é bem simples e semelhante ao anterior, vamos passar um CPF (seja com pontos ou hífen) e a função vai tratar e retornar se é válido (true) ou não (false).
//Valida CPF
        public static bool validarCPF(string CPF)
        {
            int[] mt1 = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            int[] mt2 = new int[10] { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            string TempCPF;
            string Digito;
            int soma;
            int resto;

            CPF = CPF.Trim();
            CPF = CPF.Replace(".", "").Replace("-", "");

            if (CPF.Length != 11)
                return false;

            TempCPF = CPF.Substring(0, 9);
            soma = 0;
            for (int i = 0; i < 9; i++)
                soma += int.Parse(TempCPF[i].ToString()) * mt1[i];

            resto = soma % 11;
            if (resto < 2)
                resto = 0;
            else
                resto = 11 - resto;

            Digito = resto.ToString();
            TempCPF = TempCPF + Digito;
            soma = 0;

            for (int i = 0; i < 10; i++)
                soma += int.Parse(TempCPF[i].ToString()) * mt2[i];

            resto = soma % 11;
            if (resto < 2)
                resto = 0;
            else
                resto = 11 - resto;

            Digito = Digito + resto.ToString();

            return CPF.EndsWith(Digito);
        }

segunda-feira, 4 de março de 2013

C# - Função para validar um E-mail



















É comum criarmos formulários de contato, cadastros de clientes, e até mesmo cadastro de newsletter e os usuários inserirem um e-mail inválido. Isso acaba sendo um problema, pois se for em um formulário de contato, você não tem como responder, se for em um cadastro de newsletter não terá utilidade nenhuma.

Tem uma função bem simples em C# para que possamos evitar que esse problema ocorra. Você simplesmente passa uma string com o e-mail a ser validade e a função retorna se é válido (true) ou não (false).

//Função para validar Email
        public static bool validarEmail(string Email)
        {
            bool ValidEmail = false;
            int indexArr = Email.IndexOf("@");
            if (indexArr > 0)
            {
                if (Email.IndexOf("@", indexArr + 1) > 0)
                {
                    return ValidEmail;
                }

                int indexDot = Email.IndexOf(".", indexArr);
                if (indexDot - 1 > indexArr)
                {
                    if (indexDot + 1 < Email.Length)
                    {
                        string indexDot2 = Email.Substring(indexDot + 1, 1);
                        if (indexDot2 != ".")
                        {
                            ValidEmail = true;
                        }
                    }
                }
            }
            return ValidEmail;
        }
*** Post atualizado em 06/08/2015. Conforme mencionado por um leitor anônimo, se fosse informado dois arrobas (@@), o e-mail era válidado. No mesmo comentário, o leitor Douglas Lima já apresentou a solução, que já esta atualizada no trecho de código acima.
Ainda no mesmo post, o leitor Wesley Reis sugeriu uma expressão regular para fazermos a validação. Estarei criando um novo post utilizando Expressões Regulares (RegEx) e colocando também o link aqui.
C# - Função para validar um E-mail com Expressão Regular (RegEx)

domingo, 3 de março de 2013

C# - Limitando itens em um Combo Box (WF)




















Em aplicativos Windows Forms, a propriedade “MaxDropDownItems” não funciona. Melhor dizendo, funciona mas para isso você precisa setar o valor do atributo “IntegralHeight” como “false”.

Depois disso, o seu ComboBox habilita uma barra de rolagem caso o número de itens seja superior ao que você permite neste objeto.

Veja o exemplo:

ComboBox1.IntegralHeight = false;
ComboBox1.MaxDropDownItems = 5; // valor de itens para aparecer no DropDown

Esse código funciona em Windows XP, Windows Vista e 7. Foi testado nos Frameworks 3.5 e 4.0.

sábado, 2 de março de 2013

Criptografando Strings em uma aplicação C#



















Como já vimos o básico sobre criptografia no post "O que é Criptografia?", vamos abordar de maneira prática a criptografia de strings utilizando uma aplicação Windows Forms com C#. Essa classe de criptografia poderá ser usada também em projetos Web (Web Forms, MVC).

Para iniciarmos a programação vou dizer que não vamos inventar a roda novamente, ou seja, não vamos criar o nosso próprio algoritmo de criptografia, vamos utilizar uma classe pronta do .Net, a MD5CryptoServiceProvider, que é encontrada desde a versão 1.1 do Framework.


1. Crie um projeto do Tipo Windows Forms (File - New - Project - Visual C# - Windows - Windows Forms Application);
2. Dê o nome do projeto de CriptografiaMD5;
3. Renomeie o "Form1.cs" para "frm_Crypt.cs";
4. Crie uma interface com 2 botões (1 para codificar e 1 para decodificar a string). Adicione também 4 Text Box's;
Criptografando com C#
Form para Codificar e Decodificar Strings
5. Nomeie-os da seguinte forma:
  • botão Criptografar: bt_encrypt;
  • botão Decriptar: bt_decript;
  • TextBox String para Encriptar: txt_toEncript;
  • TextBox Resultado Encriptar: txt_ResultEncript;
  • TextBox String Criptografada: txt_toDecript;
  • TextBox Resultado para Decriptar: txt_ResultDecript;
6. Crie uma classe com o nome "MD5Crypt.cs";
7. Abra a classe "MD5Crypt.cs" e importe a referência Cryptography, utilizando a sintaxe "using System.Security.Cryptography";
8. Introduza na classe o seguinte Código:
class MD5Crypt
    {
        const string senha = "12345";

        public static string Criptografar(string Message)
        {
            byte[] Results;
            System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
            MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
            byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(senha));
            TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
            TDESAlgorithm.Key = TDESKey;
            TDESAlgorithm.Mode = CipherMode.ECB;
            TDESAlgorithm.Padding = PaddingMode.PKCS7;
            byte[] DataToEncrypt = UTF8.GetBytes(Message);
            try
            {
                ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();
                Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length);
            }
            finally
            {
                TDESAlgorithm.Clear();
                HashProvider.Clear();
            }
            return Convert.ToBase64String(Results);
        }

        public static string Descriptografar(string Message)
        {
            byte[] Results;
            System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
            MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
            byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(senha));
            TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
            TDESAlgorithm.Key = TDESKey;
            TDESAlgorithm.Mode = CipherMode.ECB;
            TDESAlgorithm.Padding = PaddingMode.PKCS7;
            byte[] DataToDecrypt = Convert.FromBase64String(Message);
            try
            {
                ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor();
                Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length);
            }
            finally
            {
                TDESAlgorithm.Clear();
                HashProvider.Clear();
            }
            return UTF8.GetString(Results);
        }
    }
9. Agora precisamos chamar a função para codificar e decodificar dentro dos botões. Vamos começar criptografando uma string, para isso, dê um duplo clique no botão "bt_encrypt" (Criptografar), e insira o código:
            string strToCript = txt_toEncript.Text;
            strToCript = MD5Crypt.Criptografar(strToCript);
            txt_ResultEncript.Text = strToCript;
10. Agora dê um duplo clique no botão "bt_decript" (Decriptar), e insira o código:
            string strToDecript = txt_toDecript.Text;
            strToDecript = MD5Crypt.Decript(strToDecript);
            txt_ResultDecript.Text = strToDecript;
Pronto, a sua classe de criptografia esta pronta para ser utilizada. Para testa-lá pressione o botão F5 para compilar o seu código, e insira um texto no campo "String para Encriptar" e posteriormente clique no botão "Criptografar". Será exibido no resultado a sua string codificada.

Você agora pode pegar essa string codificada, copiar e cola no campo "String Criptografada" e clicar no botão "Decriptar". O resultado tem que ser o mesmo valor do inserido no campo "String para Encriptar".

Agora você pode usar a sua imaginação e utilizar a criptografia como quiser em seus projetos, seja para proteger dados dos usuários, para armazenar senhas de usuários, enfim, use como achar necessário.

Você pode pegar esse projeto clicando aqui.