Olá galera, nesta Quick Tips irei mostrar como podemos trabalhar com MD5 do Indy 10 do Delphi 2010. O MD5 (Message-Digest algorithm 5) é um algoritmo de hash de 128 bits unidirecional desenvolvido pela RSA Data Security, e muito utilizado por softwares com protocolo ponto-a-ponto (P2P por exemplo) na verificação de integridade de arquivos e logins.

Os hashes MD5 de 128-bit (16-byte) são normalmente representados por uma sequência de 32 caracteres hexadecimais. Veja um exemplo:

WESLEY YAMAZACK BATISTA com a conversão temos o seguinte 8B9FFE2305DF759FB68E5E0D9BB77CEE

Inicialmente vou mostrar como criarmos a estrutura do MD5, em uma Unit, a fim de reaproveitarmos a mesma em outros projetos, evitando reescrever a rotina a todo o momento que for necessário.

Vamos ao Exemplo!

Crie uma nova Unit e salve com o nome uMD5, esta Unit não teremos uma classe mas apenas a implementação dos métodos evitando assim a necessidade de se criar um Objeto para podermos utilizar as funções. Mãos a Obra!

unit uMD5;
   
  interface
    uses IdHashMessageDigest, Classes, SysUtils;
   
  function MD5String(const Value: string): string;
  function MD5Arquivo(const Value: string): string;
   
   
  implementation
   
  {Função : MD5String(Const Value : String): String;

Objetivo : Esta função serve para retornarmos Hash de um String em Hexadecimal

Dicas de Uso :

  • Criptografar uma senha e salvar a mesma no banco
  • Validação de usuário com MD5 são seguras e precisas
  • Criptografar determinados dados ao serem enviados ao Banco
  • Criptografar todos os dados de uma determinada tabela

Modo de Usar : ShowMessage(MD5String(EdtSenha.Text)); } 
  function MD5String(const Value: string): string;
  var
    xMD5: TIdHashMessageDigest5;
  begin
    xMD5 := TIdHashMessageDigest5.Create;
    try
      Result := xMD5.HashStringAsHex(Value);
    finally
      xMD5.Free;
    end;
  end;

{Função : MD5Arquivo(Const Value : String): String;

Objetivo : Esta função serve para retornarmos Hash de um Arquivo em Hexadecimal

Dicas de Uso :

  • Comparar o tamanho de dois arquivos
  • Verificar se eles têm a mesma estrutura

Modo de Usar : ShowMessage(MD5String(‘C:\Program Files\Embarcadero\RAD Studio\7.0\bin\_refactoring.log’)); }


  function MD5Arquivo(const Value: string): string;
  var
    xMD5: TIdHashMessageDigest5;
    xArquivo: TFileStream;
  begin
    xMD5 := TIdHashMessageDigest5.Create;
    xArquivo := TFileStream.Create(Value, fmOpenRead OR fmShareDenyWrite);
    try
      Result := xMD5.HashStreamAsHex(xArquivo);
    finally
      xArquivo.Free;
      xMD5.Free;
    end;
  end;
   
  end.

Fico por aqui e na próxima Quick Tips, onde veremos como trabalharmos com logins

Um abraço