//******************************************************************************
//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.