Skip to content

Calcular MD5 desde Delphi

En criptografía, MD5 (Message-Digest Algorithm 5, Algoritmo de Resumen del Mensaje 5) es un algoritmo de reducción criptográfico de 128 bits, uno de los más utilizados actualmente.

Uno de los usos más utilizados, es el de comprobar que algún archivo no haya sido modificado.

Uno de los mejores ejemplo de su uso es, cuando descargamos un archivo desde internet, el distribuidor nos entrega el hash MD5, para comprobarlo luego de la descarga y verificar que no haya cambiado.

Un hash MD5 posee una longitud de 128 bits, pero habitualmente se lee en su valor hexadecimal de 32 dígitos.

Función MD5 en Delphi

Delphi, no queda exceptuado como lenguaje de programación para poder crear una función que calcule el MD5 de un archivo.

Para realizar esta función vamos a necesitar tres unidades, ellas son IdHashMessageDigest, idHash y IdGlobal.

En este caso realizamos dos funciones similares, una que calcula el MD5 en una cadena y otra que lo calcula sobre un archivo.

uses IdGlobal, IdHash, IdHashMessageDigest;

function getFileMd5HashString(const vFileName: string): string;
var
  vHashMD5: TIdHashMessageDigest5;
  vFile: TFileStream;
begin
  vFile := TFileStream.Create(vFileName, fmOpenRead OR fmShareDenyWrite);
  vHashMD5 := nil;
  try
    vHashMD5 := TIdHashMessageDigest5.Create;
    Result := IdGlobal.IndyLowerCase(vHashMD5.HashStreamAsHex(vFile));
  finally
    vHashMD5.Free;
  end;
end;

function getMd5HashString(const vValue: string): string;
var
  vHashMD5: TIdHashMessageDigest5;
begin
  vHashMD5 := nil;
  try
    vHashMD5 := TIdHashMessageDigest5.Create;
    Result := IdGlobal.IndyLowerCase(vHashMD5.HashStringAsHex(vValue));
  finally
    vHashMD5.Free;
  end;
end;

Su forma de uso sería la siguiente:

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Calcula el MD5 de una cadena
  showmessage(getMd5HashString('cadena de texto'));

  // Calcula el MD5 de un archivo
  showmessage(getFileMd5HashString('c:\file.xxx'));
end;