Criptografar senhas usando C#

watch_later 25 de mar de 2011
comment 2 Comments
[Atualizado 2014]

Mais Links de Criptografia :

Criptograr Senha usando C#
Criar chave simples usando MD5 e SHA1


Bom dia Galera meu post de hoje é um artigo muito interessante e
gera muitas dúvidas vou postar como criptografar senhas em c# usando
um string chave...

este artigo é baseado no tópico MSDN:
http://msdn.microsoft.com/en-us/library/system.security.cryptography.md5.aspx


Primeiro iremos criar um novo Projeto no Visual Studio



Agora iremos adicionar uma classe
ela deverá chamar Criptografar.cs



e conterá o seguinte código

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;

namespace CriptografarSenhas
{
    public class Criptografar
    {
        private static string _chave;

        public Criptografar()
        {
        }

        public static string Chave
        {
            set
            {
                _chave = value;
            }
        }

        public static string CriptografaSenha(string senhaCripto)
        {
            try
            {
                return CriptografaSenha(senhaCripto, _chave);
            }
            catch (Exception ex)
            {
                return string.Format("String errada.{0}", ex.Message);
            }

        }

        public static string DescriptografaSenha(string senhaDescripto)
        {
            try
            {
                return DescriptografaSenha(senhaDescripto, _chave);
            }
            catch (Exception ex)
            {
                return string.Format("String errada.{0}", ex.Message);
            }
        }

        public static string CriptografaSenha(string senhaCripto, string chave)
        {
            try
            {
                var objcriptografaSenha = new TripleDESCryptoServiceProvider();
                var objcriptoMd5 = new MD5CryptoServiceProvider();

                byte[] byteHash, byteBuff;
                string strTempKey = chave;

                byteHash = objcriptoMd5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(strTempKey));
                objcriptoMd5 = null;
                objcriptografaSenha.Key = byteHash;
                objcriptografaSenha.Mode = CipherMode.ECB;

                byteBuff = ASCIIEncoding.ASCII.GetBytes(senhaCripto);
                return Convert.ToBase64String(objcriptografaSenha.CreateEncryptor().TransformFinalBlock(byteBuff, 0, byteBuff.Length));
            }
            catch (Exception ex)
            {
                return string.Format("Digite os valores Corretamente : {0}", ex.Message);
            }
        }


        public static string DescriptografaSenha(string strCriptografada, string chave)
        {
            try
            {
                var objdescriptografaSenha = new TripleDESCryptoServiceProvider();
                var objcriptoMd5 = new MD5CryptoServiceProvider();

                byte[] byteHash, byteBuff;
                string strTempKey = chave;

                byteHash = objcriptoMd5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(strTempKey));
                objcriptoMd5 = null;
                objdescriptografaSenha.Key = byteHash;
                objdescriptografaSenha.Mode = CipherMode.ECB;

                byteBuff = Convert.FromBase64String(strCriptografada);
                string strDecrypted = ASCIIEncoding.ASCII.GetString(objdescriptografaSenha.CreateDecryptor().TransformFinalBlock(byteBuff, 0, byteBuff.Length));
                objdescriptografaSenha = null;

                return strDecrypted;
            }
            catch (Exception ex)
            {
                return string.Format("Digite os valores Corretamente : {0}", ex.Message);
            }
        }

        public bool compararStrings(string num01, string num02)
        {
            if (num01.Equals(num02))
                return true;
            return false;
        }
    }
}



Como eu nomeei meu projeto como CriptografarSenhas o namespace do mesmo deverá ser

namespace CriptografarSenhas 

e agora que já temos nossa classe iremos criar uma página em
ASP.NET para testar nossos métodos.

a Página criada se chama Default.aspx e deverá conter o seguinte
code html

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CriptografarSenhas._Default" %>

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
    <div>
        <asp:TextBox ID="txtChave" runat="server" />

    </div>
    <div>
        <asp:TextBox ID="txtSenha" runat="server" />

    </div>
    <div>
        <asp:TextBox ID="txtResultado" Enabled="false" runat="server" />
    </div>
    <div>
        <asp:Button ID="btnCripto" runat="server" Text="Button" OnClick="btnCripto_Click" />
    </div>
</asp:Content>


agora vamos ao codebehind da Pagina Default.aspx

o arquivo Default.aspx.cs

deverá conter o seguinte código:



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CriptografarSenhas
{
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnCripto_Click(object sender, EventArgs e)
        {
            if (!String.IsNullOrEmpty(txtChave.Text) && !String.IsNullOrEmpty(txtSenha.Text))
            {
                Criptografar.Chave = txtChave.Text;
                txtResultado.Text = string.Format("Senha Criptografada é: {0}", Criptografar.CriptografaSenha(txtSenha.Text));
            }
            else
                txtResultado.Text = "Preencha os campos Adequadamente";
        }

        protected void btnDescripto_Click(object sender, EventArgs e)
        {
            if (txtChave.Text != null && txtSenha.Text != null)
            {
                Criptografar.Chave = txtChave.Text;
                txtResultado.Text = string.Format("Senha Descriptografada é: {0}", Criptografar.DescriptografaSenha(txtSenha.Text));
            }
            else
                txtResultado.Text = "Preencha os campos Adequadamente";
        }
    }
}

avatar

ola gostaria de saber se voce não teria um codigo de criptografia assimétrica ou simétrica sem classes ..
é para trabalho da faculdade
muito obrigado ..
muito bom este codigo.

delete 27/02/2014 11:11
avatar
Virtualbase person

Olá Gustavo , obrigado por ler o blog , acho que este link pode te ajudar : http://msdn.microsoft.com/pt-br/library/5e9ft273(v=vs.110).aspx

abraço

delete 27/02/2014 11:20