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.