﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comentários sobre: Dica &#8211; Criptografia MD5 com C-Sharp</title>
	<atom:link href="http://csharpbrasil.com.br/2008/10/24/dica-criptografia-md5-com-c-sharp/feed/" rel="self" type="application/rss+xml" />
	<link>http://csharpbrasil.com.br/csharp/dica-criptografia-md5-com-c-sharp/</link>
	<description>C# (C-Sharp), AJAX, ASP.NET, ASP.NET MVC, WinForm, WebForm, Entity Framework, Microsoft Framework .NET, SQL Server, Fórum</description>
	<lastBuildDate>Thu, 10 May 2012 19:46:34 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<item>
		<title>Por: heitorhog</title>
		<link>http://csharpbrasil.com.br/csharp/dica-criptografia-md5-com-c-sharp/comment-page-1/#comment-7105</link>
		<dc:creator>heitorhog</dc:creator>
		<pubDate>Tue, 27 Dec 2011 02:24:34 +0000</pubDate>
		<guid isPermaLink="false">http://csharpbrasil.com.br/?p=319#comment-7105</guid>
		<description>no caso existe um meio de fazer uma criptografia que possa indicar os algoritimos da criptografia tipo eu quero que as letras fique tudo- asd - o texto da criptografia inteiro tem como ?  exemplo   heitor  &gt; asdasd</description>
		<content:encoded><![CDATA[<p>no caso existe um meio de fazer uma criptografia que possa indicar os algoritimos da criptografia tipo eu quero que as letras fique tudo- asd &#8211; o texto da criptografia inteiro tem como ?  exemplo   heitor  &gt; asdasd</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Raphael Cardoso</title>
		<link>http://csharpbrasil.com.br/csharp/dica-criptografia-md5-com-c-sharp/comment-page-1/#comment-7104</link>
		<dc:creator>Raphael Cardoso</dc:creator>
		<pubDate>Tue, 27 Dec 2011 02:12:17 +0000</pubDate>
		<guid isPermaLink="false">http://csharpbrasil.com.br/?p=319#comment-7104</guid>
		<description>Reverter não. Uma vez feto não é possivel desfazer.</description>
		<content:encoded><![CDATA[<p>Reverter não. Uma vez feto não é possivel desfazer.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: heitorhog</title>
		<link>http://csharpbrasil.com.br/csharp/dica-criptografia-md5-com-c-sharp/comment-page-1/#comment-7103</link>
		<dc:creator>heitorhog</dc:creator>
		<pubDate>Tue, 27 Dec 2011 02:06:46 +0000</pubDate>
		<guid isPermaLink="false">http://csharpbrasil.com.br/?p=319#comment-7103</guid>
		<description>mas existe algum meio que eu consiga ler ele</description>
		<content:encoded><![CDATA[<p>mas existe algum meio que eu consiga ler ele</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Raphael Cardoso</title>
		<link>http://csharpbrasil.com.br/csharp/dica-criptografia-md5-com-c-sharp/comment-page-1/#comment-7102</link>
		<dc:creator>Raphael Cardoso</dc:creator>
		<pubDate>Tue, 27 Dec 2011 02:00:59 +0000</pubDate>
		<guid isPermaLink="false">http://csharpbrasil.com.br/?p=319#comment-7102</guid>
		<description>O MD5 não é possivel descriptografar porque ele é um algoritmo hash.
Veja mais nesses links:
&lt;ul&gt;
	&lt;li&gt;http://pt.wikipedia.org/wiki/MD5&lt;/li&gt;
	&lt;li&gt;http://pt.wikipedia.org/wiki/Hash&lt;/li&gt;
&lt;/ul&gt;</description>
		<content:encoded><![CDATA[<p>O MD5 não é possivel descriptografar porque ele é um algoritmo hash.<br />
Veja mais nesses links:</p>
<ul>
<li><a href="http://pt.wikipedia.org/wiki/MD5" rel="nofollow">http://pt.wikipedia.org/wiki/MD5</a></li>
<li><a href="http://pt.wikipedia.org/wiki/Hash" rel="nofollow">http://pt.wikipedia.org/wiki/Hash</a></li>
</ul>
]]></content:encoded>
	</item>
	<item>
		<title>Por: heitorhog</title>
		<link>http://csharpbrasil.com.br/csharp/dica-criptografia-md5-com-c-sharp/comment-page-1/#comment-7101</link>
		<dc:creator>heitorhog</dc:creator>
		<pubDate>Tue, 27 Dec 2011 01:29:19 +0000</pubDate>
		<guid isPermaLink="false">http://csharpbrasil.com.br/?p=319#comment-7101</guid>
		<description>QUERO SABER COMO EU FAÇO PARA DESCRIPTOGRAFAR ESTE METODO E PARABENS PELO ARTIGO</description>
		<content:encoded><![CDATA[<p>QUERO SABER COMO EU FAÇO PARA DESCRIPTOGRAFAR ESTE METODO E PARABENS PELO ARTIGO</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Raphael Cardoso</title>
		<link>http://csharpbrasil.com.br/csharp/dica-criptografia-md5-com-c-sharp/comment-page-1/#comment-6258</link>
		<dc:creator>Raphael Cardoso</dc:creator>
		<pubDate>Mon, 31 Oct 2011 15:21:22 +0000</pubDate>
		<guid isPermaLink="false">http://csharpbrasil.com.br/?p=319#comment-6258</guid>
		<description>Ronaldo, acredito que o problema que você está tendo é outro.
A forma como você implementou está correta, porem tem um detalhe no seu metodo SiteLevelCustomAuthenticationMethod que deveria ser diferente e você teria que informar o WHERE no SELECT.

Select * From tbPessoa where login = &#039;usuario&#039; and senha = &#039;senha_md5&#039;

A forma como esta fazendo para verificar o usuario e senha usando o laço de repetição WHILE não seria a melhor pratica.
Veja abaixo o seu codigo reescrito.

&lt;code&gt;
        private bool SiteLevelCustomAuthenticationMethod(string UserName, string Password)
        {
            bool boolReturnValue = false;

            Password = getMD5Hash(Password);

            string strConnection = &quot;server=web01\\sqlexpress;database=dbxxxxx;uid=sa;pwd=xxxxxx;&quot;;
            System.Data.SqlClient.SqlConnection Connection = new System.Data.SqlClient.SqlConnection(strConnection);
            // O replace na aspa simples é para evitar SQL Injection
            String strSQL = &quot;Select codigo From tbPessoa where login = &#039;&quot; + UserName.Replace(&quot;&#039;&quot;, &quot;&quot;) + &quot;&#039; and senha = &#039;&quot; + Password + &quot;&#039;&quot;;
            System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand(strSQL, Connection);
            Connection.Open();
            // Retorna a primeira coluna da primeira linha
            object obj = command.ExecuteScalar();
            // IF Ternario para verificar se o objeto é nulo. Caso seja atribui 0 (zero), senao converte o objeto para Integer
            int codigo = obj == null ? 0 : Convert.ToInt32(obj);
            // Verifica se o valor é maior que 0 (zero), ou seja, se o codigo é maior que 0 (zero)
            boolReturnValue = codigo &gt; 0;
            
            return boolReturnValue;
        }
&lt;/code&gt;</description>
		<content:encoded><![CDATA[<p>Ronaldo, acredito que o problema que você está tendo é outro.<br />
A forma como você implementou está correta, porem tem um detalhe no seu metodo SiteLevelCustomAuthenticationMethod que deveria ser diferente e você teria que informar o WHERE no SELECT.</p>
<p>Select * From tbPessoa where login = &#8216;usuario&#8217; and senha = &#8216;senha_md5&#8242;</p>
<p>A forma como esta fazendo para verificar o usuario e senha usando o laço de repetição WHILE não seria a melhor pratica.<br />
Veja abaixo o seu codigo reescrito.</p>
<p><code><br />
        private bool SiteLevelCustomAuthenticationMethod(string UserName, string Password)<br />
        {<br />
            bool boolReturnValue = false;</p>
<p>            Password = getMD5Hash(Password);</p>
<p>            string strConnection = "server=web01\\sqlexpress;database=dbxxxxx;uid=sa;pwd=xxxxxx;";<br />
            System.Data.SqlClient.SqlConnection Connection = new System.Data.SqlClient.SqlConnection(strConnection);<br />
            // O replace na aspa simples é para evitar SQL Injection<br />
            String strSQL = "Select codigo From tbPessoa where login = '" + UserName.Replace("'", "") + "' and senha = '" + Password + "'";<br />
            System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand(strSQL, Connection);<br />
            Connection.Open();<br />
            // Retorna a primeira coluna da primeira linha<br />
            object obj = command.ExecuteScalar();<br />
            // IF Ternario para verificar se o objeto é nulo. Caso seja atribui 0 (zero), senao converte o objeto para Integer<br />
            int codigo = obj == null ? 0 : Convert.ToInt32(obj);<br />
            // Verifica se o valor é maior que 0 (zero), ou seja, se o codigo é maior que 0 (zero)<br />
            boolReturnValue = codigo &gt; 0;</p>
<p>            return boolReturnValue;<br />
        }<br />
</code></p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: r0na1d0</title>
		<link>http://csharpbrasil.com.br/csharp/dica-criptografia-md5-com-c-sharp/comment-page-1/#comment-6254</link>
		<dc:creator>r0na1d0</dc:creator>
		<pubDate>Sun, 30 Oct 2011 19:23:46 +0000</pubDate>
		<guid isPermaLink="false">http://csharpbrasil.com.br/?p=319#comment-6254</guid>
		<description>Aproveitando, como ao invés de usar:

string strConnection = &quot;server=web01\\sqlexpress;database=dbxxxxx;uid=sa;pwd=xxxxxx;&quot;;
SqlConnection Connection = new SqlConnection(strConnection);

Usar a conexão definida no web.config:


    
  </description>
		<content:encoded><![CDATA[<p>Aproveitando, como ao invés de usar:</p>
<p>string strConnection = &#8220;server=web01\\sqlexpress;database=dbxxxxx;uid=sa;pwd=xxxxxx;&#8221;;<br />
SqlConnection Connection = new SqlConnection(strConnection);</p>
<p>Usar a conexão definida no web.config:</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: r0na1d0</title>
		<link>http://csharpbrasil.com.br/csharp/dica-criptografia-md5-com-c-sharp/comment-page-1/#comment-6253</link>
		<dc:creator>r0na1d0</dc:creator>
		<pubDate>Sun, 30 Oct 2011 19:16:21 +0000</pubDate>
		<guid isPermaLink="false">http://csharpbrasil.com.br/?p=319#comment-6253</guid>
		<description>Anderson Bueno, o bom do MD5 é que gera uma chave que não tem como descriptografar e ser descoberta, mesmo que alguém consiga vê-la. É usada apenas para comparação com a senha informada no login.
Exemplo:

Em um Banco de dados há uma tabela Pessoa com um campo &quot;senha varchar(50)&quot;.

1) Quando vc for cadastrar um novo usuário, antes de gravar a informação, no código vc usa uma função MD5 para criptografar a senha.
senha = teste
vsenha = md5(senha)
vsenha =&quot;698dc19d489c4e4db73e28a713eab07b&quot;  (string que será guardada no campo  da tabela).

2) Quando for autenticar o usuário, no código vc criptografa o valor que vier do input correspondente a senha. ex: .

vPassword = md5(password)

3) Conecta-se ao DB, pega a string armazenada no campo senha (gerada com md5)  e compara com vPassword. Se elas forem iguais dá acesso ao usuário. Se não, nega o acesso.  

Aqui não usei a sintaxe de nenhuma linguagem. Em cada uma o código será diferente e haverá funcões md5 específicas da linguagem. Foi só para passar a lógica do funcionamento. No visual Studio C#.net já tem uma classe nativa (System.Web.Security) para isso, como o autor do artigo mostrou no exemplo acima.</description>
		<content:encoded><![CDATA[<p>Anderson Bueno, o bom do MD5 é que gera uma chave que não tem como descriptografar e ser descoberta, mesmo que alguém consiga vê-la. É usada apenas para comparação com a senha informada no login.<br />
Exemplo:</p>
<p>Em um Banco de dados há uma tabela Pessoa com um campo &#8220;senha varchar(50)&#8221;.</p>
<p>1) Quando vc for cadastrar um novo usuário, antes de gravar a informação, no código vc usa uma função MD5 para criptografar a senha.<br />
senha = teste<br />
vsenha = md5(senha)<br />
vsenha =&#8221;698dc19d489c4e4db73e28a713eab07b&#8221;  (string que será guardada no campo  da tabela).</p>
<p>2) Quando for autenticar o usuário, no código vc criptografa o valor que vier do input correspondente a senha. ex: .</p>
<p>vPassword = md5(password)</p>
<p>3) Conecta-se ao DB, pega a string armazenada no campo senha (gerada com md5)  e compara com vPassword. Se elas forem iguais dá acesso ao usuário. Se não, nega o acesso.  </p>
<p>Aqui não usei a sintaxe de nenhuma linguagem. Em cada uma o código será diferente e haverá funcões md5 específicas da linguagem. Foi só para passar a lógica do funcionamento. No visual Studio C#.net já tem uma classe nativa (System.Web.Security) para isso, como o autor do artigo mostrou no exemplo acima.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: r0na1d0</title>
		<link>http://csharpbrasil.com.br/csharp/dica-criptografia-md5-com-c-sharp/comment-page-1/#comment-6251</link>
		<dc:creator>r0na1d0</dc:creator>
		<pubDate>Sun, 30 Oct 2011 18:45:52 +0000</pubDate>
		<guid isPermaLink="false">http://csharpbrasil.com.br/?p=319#comment-6251</guid>
		<description>Estou migrando do ASP clássico para c#.Net e ainda apanho em coisas básicas.

Estou usando o componente de login. Entendi como ele funciona, aparentemente conecta ao DB para autenticar mas, como a senha no DB está criptografada (md5) acho que não está trazendo correto. 
Usei sua sugestão. Segue abaixo o código. Poderia me dizer onde estou errando?

No exemplo, informo a senha 999999 (cadastrada na tabela do DB - campo login -  como 52c69e3a57331081823331c4e69d3f2e)



Login.aspx

********************************************************

    officium 1.0



body {
	background-color:#C6CDD1;
}

#tela {
	width:360px;
	height:300px;
	margin:80px auto;
	background: url(img/login.png) no-repeat;
}

#login {
	float:right;
	padding:100px 20px 0 0;
	font-family:segoe ui, arial, tahoma, verdana;
	font-size:14px;
}

#login input {
	font-family:arial, tahoma, verdana;
	font-size:14px;
	text-align:left;
	color:#000;
}

.msg {
	font-family:arial, tahoma, verdana;
	font-size:14px;
	font-weight:700;
	text-align:center;
	color:#C00;
	
}

#login .campo {
	width:140px;
	font-family:arial, tahoma, verdana;
	font-size:12px;
	text-align:left;
	color:#000;
	background-color:#FFF;
	padding:4px;
}

#login .campo:focus {
	border:1px  dashed #FF8306;
}


********************************************************

Login.cs

********************************************************

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using System.Data.OleDb;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;


public partial class Login : System.Web.UI.Page
{
    
     public string getMD5Hash(string input)
        {
        System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
        byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
        byte[] hash = md5.ComputeHash(inputBytes);
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        for (int i = 0; i &lt; hash.Length; i++)
            {
                sb.Append(hash[i].ToString(&quot;X2&quot;));
            }
        return sb.ToString();
        }


    protected void Page_Load(object sender, EventArgs e)
    {
        
    }


    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    {
        bool Authenticated = false;
        Authenticated = SiteLevelCustomAuthenticationMethod(Login1.UserName, Login1.Password);
        e.Authenticated = Authenticated;
        if (Authenticated == true)
        {
            Response.Redirect(&quot;Default.aspx&quot;);
        }
    }

    
    private bool SiteLevelCustomAuthenticationMethod(string UserName, string Password)
    {
        
  
        bool boolReturnValue = false;
        // Insert code that implements a site-specific custom
        // authentication method here.
        // This example implementation always returns false.
        string strConnection = &quot;server=web01\\sqlexpress;database=dbxxxxx;uid=sa;pwd=xxxxxx;&quot;;
        SqlConnection Connection = new SqlConnection(strConnection);
        String strSQL = &quot;Select * From tbPessoa&quot;;
        SqlCommand command = new SqlCommand(strSQL, Connection);
        SqlDataReader Dr;
        Connection.Open();
        Dr = command.ExecuteReader();
        while (Dr.Read())
        {
            if ((UserName == Dr[&quot;login&quot;].ToString()) &amp; (Password == getMD5Hash(Dr[&quot;senha&quot;].ToString())))
            {
                boolReturnValue = true;
                break;
            }
        }
        Dr.Close();
        return boolReturnValue;
   }
    
}

********************************************************

Agradeço antecipadamente a ajuda.</description>
		<content:encoded><![CDATA[<p>Estou migrando do ASP clássico para c#.Net e ainda apanho em coisas básicas.</p>
<p>Estou usando o componente de login. Entendi como ele funciona, aparentemente conecta ao DB para autenticar mas, como a senha no DB está criptografada (md5) acho que não está trazendo correto.<br />
Usei sua sugestão. Segue abaixo o código. Poderia me dizer onde estou errando?</p>
<p>No exemplo, informo a senha 999999 (cadastrada na tabela do DB &#8211; campo login &#8211;  como 52c69e3a57331081823331c4e69d3f2e)</p>
<p>Login.aspx</p>
<p>********************************************************</p>
<p>    officium 1.0</p>
<p>body {<br />
	background-color:#C6CDD1;<br />
}</p>
<p>#tela {<br />
	width:360px;<br />
	height:300px;<br />
	margin:80px auto;<br />
	background: url(img/login.png) no-repeat;<br />
}</p>
<p>#login {<br />
	float:right;<br />
	padding:100px 20px 0 0;<br />
	font-family:segoe ui, arial, tahoma, verdana;<br />
	font-size:14px;<br />
}</p>
<p>#login input {<br />
	font-family:arial, tahoma, verdana;<br />
	font-size:14px;<br />
	text-align:left;<br />
	color:#000;<br />
}</p>
<p>.msg {<br />
	font-family:arial, tahoma, verdana;<br />
	font-size:14px;<br />
	font-weight:700;<br />
	text-align:center;<br />
	color:#C00;</p>
<p>}</p>
<p>#login .campo {<br />
	width:140px;<br />
	font-family:arial, tahoma, verdana;<br />
	font-size:12px;<br />
	text-align:left;<br />
	color:#000;<br />
	background-color:#FFF;<br />
	padding:4px;<br />
}</p>
<p>#login .campo:focus {<br />
	border:1px  dashed #FF8306;<br />
}</p>
<p>********************************************************</p>
<p>Login.cs</p>
<p>********************************************************</p>
<p>using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using System.Web;<br />
using System.Web.UI;<br />
using System.Web.UI.WebControls;<br />
using System.Web.Security;<br />
using System.Data.OleDb;<br />
using System.Configuration;<br />
using System.Data;<br />
using System.Data.SqlClient;</p>
<p>public partial class Login : System.Web.UI.Page<br />
{</p>
<p>     public string getMD5Hash(string input)<br />
        {<br />
        System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();<br />
        byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);<br />
        byte[] hash = md5.ComputeHash(inputBytes);<br />
        System.Text.StringBuilder sb = new System.Text.StringBuilder();<br />
        for (int i = 0; i &lt; hash.Length; i++)<br />
            {<br />
                sb.Append(hash[i].ToString(&quot;X2&quot;));<br />
            }<br />
        return sb.ToString();<br />
        }</p>
<p>    protected void Page_Load(object sender, EventArgs e)<br />
    {</p>
<p>    }</p>
<p>    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)<br />
    {<br />
        bool Authenticated = false;<br />
        Authenticated = SiteLevelCustomAuthenticationMethod(Login1.UserName, Login1.Password);<br />
        e.Authenticated = Authenticated;<br />
        if (Authenticated == true)<br />
        {<br />
            Response.Redirect(&quot;Default.aspx&quot;);<br />
        }<br />
    }</p>
<p>    private bool SiteLevelCustomAuthenticationMethod(string UserName, string Password)<br />
    {</p>
<p>        bool boolReturnValue = false;<br />
        // Insert code that implements a site-specific custom<br />
        // authentication method here.<br />
        // This example implementation always returns false.<br />
        string strConnection = &quot;server=web01\\sqlexpress;database=dbxxxxx;uid=sa;pwd=xxxxxx;&quot;;<br />
        SqlConnection Connection = new SqlConnection(strConnection);<br />
        String strSQL = &quot;Select * From tbPessoa&quot;;<br />
        SqlCommand command = new SqlCommand(strSQL, Connection);<br />
        SqlDataReader Dr;<br />
        Connection.Open();<br />
        Dr = command.ExecuteReader();<br />
        while (Dr.Read())<br />
        {<br />
            if ((UserName == Dr[&quot;login&quot;].ToString()) &amp; (Password == getMD5Hash(Dr[&quot;senha&quot;].ToString())))<br />
            {<br />
                boolReturnValue = true;<br />
                break;<br />
            }<br />
        }<br />
        Dr.Close();<br />
        return boolReturnValue;<br />
   }</p>
<p>}</p>
<p>********************************************************</p>
<p>Agradeço antecipadamente a ajuda.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Raphael Cardoso</title>
		<link>http://csharpbrasil.com.br/csharp/dica-criptografia-md5-com-c-sharp/comment-page-1/#comment-6246</link>
		<dc:creator>Raphael Cardoso</dc:creator>
		<pubDate>Sun, 30 Oct 2011 11:47:12 +0000</pubDate>
		<guid isPermaLink="false">http://csharpbrasil.com.br/?p=319#comment-6246</guid>
		<description>Não existe descriptografia para MD5.</description>
		<content:encoded><![CDATA[<p>Não existe descriptografia para MD5.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Anderson Bueno</title>
		<link>http://csharpbrasil.com.br/csharp/dica-criptografia-md5-com-c-sharp/comment-page-1/#comment-6179</link>
		<dc:creator>Anderson Bueno</dc:creator>
		<pubDate>Tue, 25 Oct 2011 16:08:55 +0000</pubDate>
		<guid isPermaLink="false">http://csharpbrasil.com.br/?p=319#comment-6179</guid>
		<description>legal, e a descriptografia?</description>
		<content:encoded><![CDATA[<p>legal, e a descriptografia?</p>
]]></content:encoded>
	</item>
</channel>
</rss>

