segunda-feira, 8 de janeiro de 2007

Como calcular um Hash MD5 a partir de uma string

Esta é uma prática comum para armazenar senhas em um banco de dados. MD5 (definido no RFC 1321) é uma algorítimo hash comum, e usá-lo no C# é muito simples.

Aqui encontramos uma implementação de um método que converte uma String para um MD5 Hash, contendo uma string de 32 caracteres haxadecimais.

public string CalculateMD5Hash(string input)
{

// Primeiro passo, calcular o MD5 hash a partir da string
MD5 md5 = System.Security.Cryptography.MD5.Create();

byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
byte[] hash = md5.ComputeHash(inputBytes);

// Segundo passo, converter o array de bytes em uma string haxadecimal
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++) {
sb.Append(hash[i].ToString("X2"));
}

return sb.ToString();

}

Exemplo da chamada da função:
string hash = CalculateMD5Hash("abcdefghijklmnopqrstuvwxyz");

…a string de retorno se parece com isso:
C3FCD3D76192E4007DFB496CCA67E13B

Para transformar a string hexadecimal em caixa baixa(letras minúsculas), substitua a linha dentro do FOR por esta linha:
sb.Append(hash[i].ToString("x2"));

A diferença é o parâmetro do método ToString.

Um comentário:

Anônimo disse...

No lugar do for que você usou pra converter em hexa, coloque o seguinte código:

return BitConverter.ToString(encodedBytes);

elel vai transformar cada byte em hexa e inserir um '-' entre eles.

Neobux