Back-End

22 jan, 2019

C# – Calculando o Hash de arquivos

Publicidade

Neste artigo vou mostrar como calcular o Hash de arquivos usando a linguagem C#. Os códigos de hash são códigos que representam, de forma concisa, arquivos ou outros trechos de dados. A ideia básica é combinar os bytes dos dados de maneira que dois arquivos diferentes tenham códigos hash diferentes.

Se você salvar o código de hash de um arquivo, poderá dizer se alguém modificou o arquivo calculando um novo código de hash e verificando se ele corresponde ao valor que você salvou originalmente.

Neste artigo vamos usar dois algoritmos de hashing diferentes: MD5 e SHA256. Ambos são fornecidos pelo namespace System.Security.Cryptography.

Vamos usar a classe abstrata SHA256, que calcula o hash SHA256 para os dados de entrada. O tamanho do hash SHA256 é de 256 bits.

O método ComputeHash vai calcular o hash e retornar um fluxo de bytes. Como não podemos exibir um fluxo de bytes diretamente para o usuário, vamos usar um método para converter os bytes em uma string.

Já a classe MD5 representa a classe base abstrata da qual todas as implementações do algoritmo de hash MD5 herdam. O tamanho do hash MD5 é de 128 bits.

O método ComputeHash da classe MD5 vai calcular o hash e retornar uma matriz de 16 bytes, mas algumas implementações de MD5 produzem um hash de 32 caracteres em formato hexadecimal.

Para poder interoperar com tais implementações, vamos formatar o valor de retorno de ComputeHash como um valor hexadecimal.

A seguir mostrarei um forma bem simples de implementar isso.

Recursos usados

Criando o projeto Windows Forms

Abra o VS 2017 Community e crie um novo projeto (File > New Project) usando a linguagem C# e o template Windows Forms App (.NET Framework).

Informe um nome a seu gosto – eu vou usar o nome CSharp_ArqHash;.

No formulário Form1 do projeto, inclua os seguintes controles a partir da ToolBox:

  • 1 Label – Text=Arquivo
  • 1 TextBox – txtArquivo
  • 1 Button – btnLocalizar
  • 1 Button – btnCalcularHash
  • 1 GroupBox
  • 2 Labels
  • 2 TextBox – txtMD5 e txtSHA256
  • 1 OpenFileDialog – ofdlg1

Disponha os controles conforme o layout da figura abaixo:

A seguir, inclua no formulário os seguintes namespaces:

using System;
using System.IO;
using System.Security.Cryptography;
using System.Windows.Forms;

No evento Load do formulário inclua o código que carrega o caminho e nome do arquivo executável da aplicação:

No botão para localizar o arquivo, inclua no evento Click o código abaixo:

O código apenas atribui o nome do arquivo selecionado à caixa de texto txtArquivo.

Agora, no evento Click do botão Calcular Hash, define o código que vai calcular o hash md5 e sha256:

Estamos usando os métodos GetHashMD5() e GetHashSha256() para calcular o hash e convertendo o resultado de bytes para string.

1 – Método GetHashMD5():

2 – Método GetHashSha256():

A seguir, o código do método BytesToString() para converter o resultado para string:

Executando o projeto iremos obter o seguinte resultado:

Pegue o projeto completo: CSharp_ArqHash.zip.