Para ter certeza que o conteúdo de um arquivo não foi alterado você pode gerar um checksum deste arquivo. Um checksum é um valor short ou string que é criado usando o conteúdo do arquivo. O Cálculo do checksum de arquivos com conteúdos idênticos irá gerar resultados idênticos, mas se o conteúdo dos arquivos for diferente então valores de checksum diferentes serão obtidos. Um bom algoritmo para gerar checksum deve ser muito sensível a qualquer mudança na fonte dos dados.
CheckSum - Pode ser entendido também como um sistema de checagem (Cálculo de CRC - Cycling redundance check) que consiste em verificar um arquivo ou pacote de dados utilizando um código enviado no início da transmissão. O código é usado pelo receptor para verificar se a transmissão está completa e se o arquivo não está corrompido.
Vamos mostrar a seguir como gerar o checksum no VB 2005
Crie uma nova aplicação do tipo Windows Forms e inclua dois controles TextBox chamados
e
e um controle Button chamado
. A seguir defina a propriedade
como True. Abaixo temos o layout do formulário criado:
Os namespaces usados no projeto são:
Imports System.Text
Imports System.Security.Cryptography
O código do botão - Gerar CheckScum - é dado a seguir:
A rotina que efetua a geração do checkSum usando as funções de Hash é dado a seguir:
Executando o projeto e selecionando um arquivo existente chamado checksum.txt para gerar o checksum o resultado obtido é mostrado a seguir:
Os valores de CheckSum são especialmente úteis quando você quer saber se dois arquivos , ou dois conjuntos de dados, contêm conteúdo idêntico. Eles são tipicamente gerados usando um algoritmo de hashing - um método de processamento que toma uma parte do conteúdo original e gera um valor condensado representando o conteúdo completo.
Um hash é uma seqüência de letras ou números geradas por um algoritmo de dispersão.
Essa seqüê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.
Como a seqüência do hash é limitada, muitas vezes não passando de 512 bytes, existem diversas colisões (seqüências iguais para dados diferentes). Quanto maior for a dificuldade de se criar colisões intencionais, melhor é o algoritmo.
Uma função de hash recebe um valor de um determinado tipo e retorna um código para ele. Enquanto o ideal seria gerar identificadores únicos para os valores de entrada, isso normalmente não é possível: na maioria dos casos, o contra-domínio de nossa função é muito menor do que o seu domínio, ou seja, x (o tipo de entrada) pode assumir uma gama muito maior de valores do que hash(x) (o resultado da função de hash).
Os mais usados algoritmos de hash são os 16 bytes: MD2, MD4, MD5 ou o SHA-1, de 20 bytes. Características de alguns algoritmos:
1 - MD4: Desenvolvido em 1990/91 por Ron Rivest, vários ataques foram detectados, o que fez com que o algoritmo fosse considerado frágil.
2 - SHA-1 (Secure Hash Algorithm): Desenvolvido pelo NIST e NSA e é considerado como o mais seguro atualmente.
fonte - Wikipédia - http://pt.wikipedia.org/wiki/Hash
Os algoritmos hashing processam a entrada de dados em blocos. Como um hash é calculado para cada bloco, o próximo bloco é produzido e usado ou sobreposto em um hash existente. Esta constante mesclagem de dados torna o algoritmo sensível a qualquer mudança no seu conteúdo original.
A .NET Framework incluí diversos algoritmos de hashing e características de criptografia no namespace
System.Security.Cryptography
. O código do exemplo mostrado acima usa a classe
(Hash-based Message Authentication Code, ou HMAC, via a função de hash SHA-1) do namespace
System.Security.Cryptography
para gerar o hash.
As funções de hash como a função SHA-1 foram desenvolvidas por organizações privadas e agências de segurança do governo para ajudar a proteger informações. Diversas funções de hash similares e algoritmos de cifragem estão incluídas neste namespace para serem usadas conforme sua necessidade.
Por José Carlos Macoratti - www.macoratti.net