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;