Alô amigos da rede globu,

eis que retorno depois de uma breve ausência, conforme expliquei no post anterior, este jovem Analista de Sistemas estava sem internet, na verdade eu ainda estou teoricamente sem internet, continuo sem banda larga decente, estou usando um 3g da Claro, apesar de os serviços de 3g da Claro terem melhorado consideravelmente desde a última vez que usei, continua não chegando perto da velocidade de um serviço de banda larga fixo como Velox ou Virtua.

Por este motivo internetístico é que eu não irei postar a solução de hoje em vídeo-aula, ela será postada diretamente aqui no blog, então vamos lá, mãos a obra…

Primeiramente vocês podem me perguntar, o que é um Hash, vou usar parte da definição da boa e velha wikipedia

O conceito teórico diz que “hash é a transformação de uma grande quantidade de informações em uma pequena quantidade de informações”.
Essa sequência busca identificar um arquivo ou informação unicamente. Por exemplo, uma mensagem de correio eletrônico, uma senha, uma chave criptográfica ou mesmo um arquivo. É um método para transformar dados de tal forma que o resultado seja (quase) exclusivo. Além disso, funções usadas em criptografia garantem que não é possível a partir de um valor de hash retornar à informação original.

Portanto jovens gafanhotos, nesta humilde solução de hoje, iremos aprender a gerar o hash de um arquivo usando C# e windows forms, este método é usado para ter a integridade de arquivos compartilhados na web, geralmente se o tamanho de um arquivo muda, o hash dele também irá mudar, este método também pode ser utilizado normalmente em aplicações web.

Primeiramente vamos criar um projeto windows forms, com o nome de prjHashes.

Depois vamos modelar o form conforme a imagem abaixo

os nomes definidos para os componentes foram:

textbox de escolha do arquivo : txtArquivo

textbox de hash do arquivo: txtHashArquivo

botão de escolha do arquivo (botão com o …):  btnAbrirArquivo

botão gerar hash : btnGerarHash

RadioButton MD5 : rbMD5

RadioButton SHA1: rbSHA1

OpenFileDialog: ofd (para adicionar um OpenFileDialog basta ir na toolbox, aba Dialogs e arrastar o componente para o form)

os demais componentes (labels e groupbox) os nomes foram deixados conforme gerados pelo Visual Studio.

Lembre-se de deixar o RadioButton SHA1 com a propriedade checked = True.

Agora vamos configurar o comportamento do clique no botão de escolha do arquivo, dando 2 cliques nele vamos criar o evento e programaremos conforme a imagem abaixo.

Preguiçosamente, alternativamente podem copiar o código abaixo.

[box]

try
{
ofd = new OpenFileDialog();
ofd.Title = “Selecione o arquivo”;
if (ofd.ShowDialog() == DialogResult.OK)
{
txtArquivo.Text = ofd.FileName;
}
}
catch (Exception ex)
{

MessageBox.Show(ex.Message);
}

[/box]

para identar o código use o bom e velho CTRL + K + D.

Agora vamos adicionar uma classe em nosso projeto, esta classe vai se chamar Hashs e ela vai ser pública e estática, sendo uma classe estática, para usá-la não precisaremos criar uma instância dela para usar, dentro desta classe também vamos criar um Enumeration que vai definir o nosso tipo da Hash gerada, programaremos conforme abaixo.

Utilizamos um HashAlgorithm como variável inicial pois a classe HashAlgorithm é a classe base das classes System.Security.Cryptography.MD5 e System.Security.Cryptography.SHA1, a classe HashAlgorithm implementa a interface IDisposable, o que nos permitiria usá-la dentro de uma cláusula using, que libera os recursos alocados para a variável após o término do seu uso, porém, da forma que implementamos fica inviável essa utilização, o que nos obriga a chamar o método Dispose no final do método.

Dito isso, agora devemos programar o form para fazer uso da classe, portanto, vamos dar 2 cliques no botão Gerar Hash, a implementação ficou bem simples conforme mostra a imagem abaixo.

Feito isto, vou criar um arquivo TXT de nome arquivo.txt e vou escrever dentro dele a frase BLOG DO VANDERSON, feito isso vou rodar a aplicação e gerar o Hash, ele gera com sucesso, conforme a imagem abaixo.

Agora vamos observar um detalhe, se eu mudarmos o nome do arquivo, o hash muda? A imagem abaixo explica.

Conforme visto na imagem, se o nome do arquivo mudar, o Hash continua o mesmo, agora, e se mudarmos o conteúdo do arquivo? A imagem abaixo mostra o que acontece.

Ou seja, o tamanho do arquivo tem influência direta na geração do Hash do arquivo, por isso que sites com arquivos para download, como por exemplo o site do BackTrack fornecem a chave md5 do arquivo, para verificar se o arquivo não foi alterado, seja por algum erro no download ou por algum usuário malicioso, nos exemplos usamos o SHA1, mas, o mesmo vale para a Hash MD5.

Caso queira, baixe a solução completa aqui.

VN:F [1.9.22_1171]
Rating: 6.7/10 (3 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)
Gerando Hashs MD5 e SHA de arquivos utilizando C# - Visual Studio 2010, 6.7 out of 10 based on 3 ratings