delphi -MD5 工具

MD5哈希实现及文件校验
这是一个使用Delphi实现的MD5哈希算法,包括MD5初始化、更新、最终化等核心过程,以及文件到MD5的转换功能。代码提供了将字符串和文件转化为MD5摘要的函数,用于数据完整性校验。

代码

unit md5;

// -----------------------------------------------------------------------------------------------
interface
// -----------------------------------------------------------------------------------------------

uses
  Windows, Classes, SysUtils;

type
  TProgressEvent = procedure (aPercent: Integer) of object;
	
  MD5Count = array[0..1] of DWORD;
  MD5State = array[0..3] of DWORD;
  MD5Block = array[0..15] of DWORD;
  MD5CBits = array[0..7] of byte;
  MD5Digest = array[0..15] of byte;
  MD5Buffer = array[0..63] of byte;
  MD5Context = record
    State: MD5State;
    Count: MD5Count;
    Buffer: MD5Buffer;
  end;

procedure MD5Init(var Context: MD5Context);
procedure MD5Update(var Context: MD5Context; Input: pAnsiChar; Length: longword);
procedure MD5Final(var Context: MD5Context; var Digest: MD5Digest);

function StrToMD5(M: AnsiString): MD5Digest;
function ViewMD5(D: MD5Digest): AnsiString;
function StrToMD5Str(M: AnsiString): AnsiString;
function  FileToMD5(const aFileName: String; aProgress: TProgressEvent): MD5Digest;
function  FileToMD5Str(const aFileName: String; aProgress: TProgressEvent = nil): string;
function MatchMD5(D1, D2: MD5Digest): boolean;

function DecryptMD5(Decryptstr: AnsiString): AnsiString;
function EncryptMD5(Encyptstr: AnsiString): AnsiString;

function MD5Print(D: MD5Digest): AnsiString;
const
  MD5_16_0 = '0000000000000000';
// -----------------------------------------------------------------------------------------------
implementation
// -----------------------------------------------------------------------------------------------

var
  PADDING: MD5Buffer = (
    $80, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00
    );

function DecryptMD5(Decryptstr: AnsiString): AnsiString;
begin
  Result := StrToMD5Str(Decryptstr);
end;

function EncryptMD5(Encyptstr: AnsiString): AnsiString;
begin
  Result := StrToMD5Str(Encyptstr);
end;

function F(x, y, z: DWORD): DWORD;
begin
  Result := (x and y) or ((not x) and z);
end;

function G(x, y, z: DWORD): DWORD;
begin
  Res
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Listest

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值