zoukankan      html  css  js  c++  java
  • 【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.

  • 相关阅读:
    【Python】使用hashlib进行MD5和sha1摘要计算
    【Python】torrentParser1.04 增加获得磁力链URI功能
    day30_Hibernate复习_02
    day30_Hibernate学习笔记_02
    day29_Hibernate复习_01
    day29_Hibernate学习笔记_01
    【重要】Spring在web.xml中的配置原理说明
    HTTP常见错误编号
    一级缓存和二级缓存的理解
    电商网站前台与后台系统架构
  • 原文地址:https://www.cnblogs.com/caibirdy1985/p/4232965.html
Copyright © 2011-2022 走看看