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:
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:
Hash do arquivo do projeto: E950DD87A178ECF9DDD8752E0E0598A5




