none
Criptografia RRS feed

  • Pergunta

  • Olá,

    Tem alguma forma simples, pequena e didática de se criar uma criptografia MD5? Apenas para senhas. Seja em c# ou vb.net?

    Criei alguns exemplos, mas em sua maioria complexos e grandes.

     

    grato,
    Nakane

    segunda-feira, 12 de julho de 2010 12:29

Respostas

  • Eu respondi uma outra thread com um problema semelhante. Veja se isso te serve:

    http://social.msdn.microsoft.com/Forums/pt-BR/vscsharppt/thread/7fc1a012-f5e2-4f1b-ada5-888efec28807

     

    Mas basicamente o que vc tem que fazer etsa nesse trecho de código:

     

     public string GeneratePasswordHash(string thisPassword)
     {
     MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
     byte[] tmpSource;
     byte[] tmpHash;
    
     tmpSource = ASCIIEncoding.ASCII.GetBytes(thisPassword); // Turn password into byte array
     tmpHash = md5.ComputeHash(tmpSource);
    
     StringBuilder sOutput = new StringBuilder(tmpHash.Length);
     for (int i = 0; i < tmpHash.Length; i++)
     {
     sOutput.Append(tmpHash[i].ToString("X2")); // X2 formats to hexadecimal
     }
     return sOutput.ToString();
     }
    
     public Boolean VerifyHashPassword(string thisPassword, string thisHash)
     {
     Boolean IsValid = false;
     string tmpHash = GeneratePasswordHash(thisPassword); // Call the routine on user input
     if (tmpHash == thisHash) IsValid = true; // Compare to previously generated hash
     return IsValid;
     }
    

    Em uma primeira etapa vc gera um Hash com o metodo GeneratePasswordHash, por exemplo:

    string myHash=GeneratePasswordHash("Senha");

    Depois salve o conteudo de myHash em uma base de dados, arquivo texto, qualquer outra forma de persistencia.

    Quando que quiser verificar se a senha digitada é a mesma que vc guardou, faça

    1-Recupere o hash salvo na primeira etapa (é de prache usar o nome do usuario como chave primaria)

    2- Utilize o metod VerifyHashPassword para verificar se a senha é a mesma, p. ex.:

       bool valido=VerifyHashPassword ("Senha", myHashFromDatabase)

    Att

     

     

     


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    • Sugerido como Resposta AndreAlvesLimaModerator segunda-feira, 12 de julho de 2010 16:56
    • Marcado como Resposta Nakane quinta-feira, 15 de julho de 2010 01:12
    segunda-feira, 12 de julho de 2010 13:45
    Moderador

Todas as Respostas

  • Eu respondi uma outra thread com um problema semelhante. Veja se isso te serve:

    http://social.msdn.microsoft.com/Forums/pt-BR/vscsharppt/thread/7fc1a012-f5e2-4f1b-ada5-888efec28807

     

    Mas basicamente o que vc tem que fazer etsa nesse trecho de código:

     

     public string GeneratePasswordHash(string thisPassword)
     {
     MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
     byte[] tmpSource;
     byte[] tmpHash;
    
     tmpSource = ASCIIEncoding.ASCII.GetBytes(thisPassword); // Turn password into byte array
     tmpHash = md5.ComputeHash(tmpSource);
    
     StringBuilder sOutput = new StringBuilder(tmpHash.Length);
     for (int i = 0; i < tmpHash.Length; i++)
     {
     sOutput.Append(tmpHash[i].ToString("X2")); // X2 formats to hexadecimal
     }
     return sOutput.ToString();
     }
    
     public Boolean VerifyHashPassword(string thisPassword, string thisHash)
     {
     Boolean IsValid = false;
     string tmpHash = GeneratePasswordHash(thisPassword); // Call the routine on user input
     if (tmpHash == thisHash) IsValid = true; // Compare to previously generated hash
     return IsValid;
     }
    

    Em uma primeira etapa vc gera um Hash com o metodo GeneratePasswordHash, por exemplo:

    string myHash=GeneratePasswordHash("Senha");

    Depois salve o conteudo de myHash em uma base de dados, arquivo texto, qualquer outra forma de persistencia.

    Quando que quiser verificar se a senha digitada é a mesma que vc guardou, faça

    1-Recupere o hash salvo na primeira etapa (é de prache usar o nome do usuario como chave primaria)

    2- Utilize o metod VerifyHashPassword para verificar se a senha é a mesma, p. ex.:

       bool valido=VerifyHashPassword ("Senha", myHashFromDatabase)

    Att

     

     

     


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    • Sugerido como Resposta AndreAlvesLimaModerator segunda-feira, 12 de julho de 2010 16:56
    • Marcado como Resposta Nakane quinta-feira, 15 de julho de 2010 01:12
    segunda-feira, 12 de julho de 2010 13:45
    Moderador
  • Sim, foi exatamente como eu havia codificado
    quinta-feira, 15 de julho de 2010 01:13