MD5: Validando um arquivo com C#

MD5 hoje é uma das tecnologias de criptografia mais utilizadas, vários sites para atestarem a validade de um arquivo disponibilizando a hash do mesmo. A grande vantagem é que ao verificar esta string é que você tem a garantia que tem uma cópia igual a do servidor em que você baixou.

Existem (creio eu) que existem mil e uma formas de se validar um arquivo com md5, aqui vou utilizar c# para validar um arquivo qualquer.

Inicialmente eu crie um form com 2 abas bem simples:


Imagem 1-1


Imagem 1-2

Na imagem 1-2 o zero é apenas para identificar a existência de um label. Não vou mostrar no post os códigos para fazer os forms funcionarem, mas postarei o projeto com o mesmo funcionando, pois acho que este não é o escopo do post.

Feito isso vamos a parte prática do código para validar/gerar:

Para verificar um md5:

   1: public static Boolean VerificaMD5(FileStream arquivo, String Md5)

   2: {

   3:         Boolean retorno = false;

   4:         MD5 x = new MD5CryptoServiceProvider();

   5:

   6:         byte[] retval = x.ComputeHash(arquivo);

   7:         arquivo.Close();

   8:

   9:         StringBuilder rt = new StringBuilder();

  10:

  11:         for (int i = 0; i < retval.Length; i++)

  12:         {

  13:             rt.Append(retval[i].ToString("X2"));

  14:         }

  15:

  16:         if (rt.ToString().Equals(Md5))

  17:             retorno = true;

  18:

  19:         return retorno;

  20:

  21: }

Codigo 1-1

 

   1: public static String GerarMd5(FileStream arquivo)

   2:     {

   3:             MD5 x = new MD5CryptoServiceProvider();

   4:

   5:             byte[] retval = x.ComputeHash(arquivo);

   6:             arquivo.Close();

   7:

   8:             StringBuilder rt = new StringBuilder();

   9:

  10:             for (int i = 0; i < retval.Length; i++)

  11:             {

  12:                 rt.Append(retval[i].ToString("X2"));

  13:             }

  14:

  15:             return rt.ToString();

  16: }

Codigo 1-2

No código 1-1, é recebido uma String e o FileStream do arquivo a ser verificado, criado o provider do Md5, chamo o método ComputeHash(FileStream) que retorna um vetor de bytes.
Com o StringBuilder vou adicionando e armazenando os valores.
ao final verifico se a String recebida é igual a gerada e dou um retorno boolean
No código 1-2 para gerar segue a mesma lógica do 1-1 com a diferença que como estou gerando basta retornar a String com o valor md5.

Esta lógica pode ser aplicada em qualquer contexto bastando uma adaptação para o que for necessário validar, vale a pena consultar nas referências no fim do post para saber mais sobre a classe MD5CryptoServiceProvider

 

Referências:

Download do projeto:

Download

Hash do arquivo do projeto: E950DD87A178ECF9DDD8752E0E0598A5

Sem comentários ='(.

Deixe um comentário