【Delphi】MD5算法(二):应用

//******************************************************************************

//MD5算法:应用

//******************************************************************************

//作者:Cai

//日期:2011-10-25

//描述:基于MD5算法单元MD5Class实现取字符串、文件的MD5

//******************************************************************************

unit MD5Utils;

interface
uses
SysUtils, Classes,
MD5Class;


type

TMD5 = Class
protected
FHash: TMD5Class;
public
constructor Create(); virtual;
destructor Destroy; override;
//=========MD5算法:应用==============
function StrToMD5_String(sStr: string): string;
function StrToMD5_Digest(sStr: string): TMD5Digest;
function FileToMD5_String(sFileName: string): string;
function FileToMD5_Digest(sFileName: string): TMD5Digest;
end;



implementation



{ TMD5 }

constructor TMD5.Create;
begin
FHash := TMD5Class.Create;
end;

destructor TMD5.Destroy;
begin
FHash.Destroy;
inherited;
end;

// Digests a file.
function TMD5.FileToMD5_Digest(sFileName: string): TMD5Digest;
var
FileStream: TFileStream;
iLen: UINT4;
Buffer: array[0..1024-1]of Byte;
Context: TMD5Context;
begin
FillChar(Result, SizeOf(TMD5Digest), 0);
if not FileExists(sFileName) then Exit;
FileStream := TFileStream.Create(sFileName, fmOpenRead or fmShareDenyNone);
try
FHash.MD5Init(Context);
while True do
begin
iLen := FileStream.Read(Buffer, 1024);
if iLen>0 then
FHash.MD5Update(Context, @Buffer, iLen);
if iLen<1024 then Break;
end;
FHash.MD5Final(Result, Context);
finally
FileStream.Destroy;
end;
end;

function TMD5.FileToMD5_String(sFileName: string): string;
begin
Result := TMD5Class.DigestToString(FileToMD5_Digest(sFileName));
end;

// Digests a string
function TMD5.StrToMD5_Digest(sStr: string): TMD5Digest;
var
Context: TMD5Context;
begin
FillChar(Result, SizeOf(TMD5Digest), 0);
FHash.MD5Init(Context);
FHash.MD5Update(Context, PByte(PChar(sStr)), Length(sStr));
FHash.MD5Final(Result, Context);
end;

function TMD5.StrToMD5_String(sStr: string): string;
begin
Result := TMD5Class.DigestToString(StrToMD5_Digest(sStr));
end;

end.

 

 //MD5测试代码:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
uses
  MD5Utils;

{$R *.dfm}

var
MD5: TMD5;

//取字符串MD5值
procedure TForm1.Button1Click(Sender: TObject);
begin
MD5:=TMD5.Create;
try
Memo1.Lines.Add('Text MD5 = '+MD5.StrToMD5_String(Edit1.Text));
finally
MD5.Destroy;
end;
end;

//取文件MD5值
procedure TForm1.Button2Click(Sender: TObject);
begin
if not OpenDialog1.Execute() then Exit;
MD5:=TMD5.Create;
try
Memo1.Lines.Add('File MD5 = '+MD5.FileToMD5_String(OpenDialog1.FileName));
finally
MD5.Destroy;
end;
end;

end.

原文地址:https://www.cnblogs.com/caibirdy1985/p/4232965.html