亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

delphi xe 可用的MD5算法

2020-01-31 20:52:13
字體:
供稿:網(wǎng)友

復制代碼 代碼如下:

unit MD5;

interface

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

type
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 MD5File(N: String): MD5Digest;
function MD5Print(D: MD5Digest): AnsiString;
function MD5F(FileName: AnsiString): AnsiString;
function MD5S(Str: AnsiString): AnsiString;

// MD5F為計算文件的MD5值,MD5S為計算字符串的MD5值!
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);

implementation

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
Result := (x and z) or (y and (not z));
end;

function H(x, y, z: DWORD): DWORD;
begin
Result := x xor y xor z;
end;

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

procedure rot(var x: DWORD; N: Byte);
begin
x := (x shl N) or (x shr (32 - N));
end;

procedure FF(var a: DWORD; b, c, D, x: DWORD; s: Byte; ac: DWORD);
begin
inc(a, F(b, c, D) + x + ac);
rot(a, s);
inc(a, b);
end;

procedure GG(var a: DWORD; b, c, D, x: DWORD; s: Byte; ac: DWORD);
begin
inc(a, G(b, c, D) + x + ac);
rot(a, s);
inc(a, b);
end;

procedure HH(var a: DWORD; b, c, D, x: DWORD; s: Byte; ac: DWORD);
begin
inc(a, H(b, c, D) + x + ac);
rot(a, s);
inc(a, b);
end;

procedure II(var a: DWORD; b, c, D, x: DWORD; s: Byte; ac: DWORD);
begin
inc(a, I(b, c, D) + x + ac);
rot(a, s);
inc(a, b);
end;

procedure Encode(Source, Target: pointer; Count: longword);
var
s: PByte;
T: PDWORD;
I: longword;
begin
s := Source;
T := Target;
for I := 1 to Count div 4 do
begin
T^ := s^;
inc(s);
T^ := T^ or (s^ shl 8);
inc(s);
T^ := T^ or (s^ shl 16);
inc(s);
T^ := T^ or (s^ shl 24);
inc(s);
inc(T);
end;
end;

procedure Decode(Source, Target: pointer; Count: longword);
var
s: PDWORD;
T: PByte;
I: longword;
begin
s := Source;
T := Target;
for I := 1 to Count do
begin
T^ := s^ and $FF;
inc(T);
T^ := (s^ shr 8) and $FF;
inc(T);
T^ := (s^ shr 16) and $FF;
inc(T);
T^ := (s^ shr 24) and $FF;
inc(T);
inc(s);
end;
end;

procedure Transform(Buffer: pointer; var State: MD5State);
var
a, b, c, D: DWORD;
Block: MD5Block;
begin
Encode(Buffer, @Block, 64);
a := State[0];
b := State[1];
c := State[2];
D := State[3];
FF(a, b, c, D, Block[0], 7, $D76AA478);
FF(D, a, b, c, Block[1], 12, $E8C7B756);
FF(c, D, a, b, Block[2], 17, $242070DB);
FF(b, c, D, a, Block[3], 22, $C1BDCEEE);
FF(a, b, c, D, Block[4], 7, $F57C0FAF);
FF(D, a, b, c, Block[5], 12, $4787C62A);
FF(c, D, a, b, Block[6], 17, $A8304613);
FF(b, c, D, a, Block[7], 22, $FD469501);
FF(a, b, c, D, Block[8], 7, $698098D8);
FF(D, a, b, c, Block[9], 12, $8B44F7AF);
FF(c, D, a, b, Block[10], 17, $FFFF5BB1);
FF(b, c, D, a, Block[11], 22, $895CD7BE);
FF(a, b, c, D, Block[12], 7, $6B901122);
FF(D, a, b, c, Block[13], 12, $FD987193);
FF(c, D, a, b, Block[14], 17, $A679438E);
FF(b, c, D, a, Block[15], 22, $49B40821);
GG(a, b, c, D, Block[1], 5, $F61E2562);
GG(D, a, b, c, Block[6], 9, $C040B340);
GG(c, D, a, b, Block[11], 14, $265E5A51);
GG(b, c, D, a, Block[0], 20, $E9B6C7AA);
GG(a, b, c, D, Block[5], 5, $D62F105D);
GG(D, a, b, c, Block[10], 9, $2441453);
GG(c, D, a, b, Block[15], 14, $D8A1E681);
GG(b, c, D, a, Block[4], 20, $E7D3FBC8);
GG(a, b, c, D, Block[9], 5, $21E1CDE6);
GG(D, a, b, c, Block[14], 9, $C33707D6);
GG(c, D, a, b, Block[3], 14, $F4D50D87);
GG(b, c, D, a, Block[8], 20, $455A14ED);
GG(a, b, c, D, Block[13], 5, $A9E3E905);
GG(D, a, b, c, Block[2], 9, $FCEFA3F8);
GG(c, D, a, b, Block[7], 14, $676F02D9);
GG(b, c, D, a, Block[12], 20, $8D2A4C8A);
HH(a, b, c, D, Block[5], 4, $FFFA3942);
HH(D, a, b, c, Block[8], 11, $8771F681);
HH(c, D, a, b, Block[11], 16, $6D9D6122);
HH(b, c, D, a, Block[14], 23, $FDE5380C);
HH(a, b, c, D, Block[1], 4, $A4BEEA44);
HH(D, a, b, c, Block[4], 11, $4BDECFA9);
HH(c, D, a, b, Block[7], 16, $F6BB4B60);
HH(b, c, D, a, Block[10], 23, $BEBFBC70);
HH(a, b, c, D, Block[13], 4, $289B7EC6);
HH(D, a, b, c, Block[0], 11, $EAA127FA);
HH(c, D, a, b, Block[3], 16, $D4EF3085);
HH(b, c, D, a, Block[6], 23, $4881D05);
HH(a, b, c, D, Block[9], 4, $D9D4D039);
HH(D, a, b, c, Block[12], 11, $E6DB99E5);
HH(c, D, a, b, Block[15], 16, $1FA27CF8);
HH(b, c, D, a, Block[2], 23, $C4AC5665);
II(a, b, c, D, Block[0], 6, $F4292244);
II(D, a, b, c, Block[7], 10, $432AFF97);
II(c, D, a, b, Block[14], 15, $AB9423A7);
II(b, c, D, a, Block[5], 21, $FC93A039);
II(a, b, c, D, Block[12], 6, $655B59C3);
II(D, a, b, c, Block[3], 10, $8F0CCC92);
II(c, D, a, b, Block[10], 15, $FFEFF47D);
II(b, c, D, a, Block[1], 21, $85845DD1);
II(a, b, c, D, Block[8], 6, $6FA87E4F);
II(D, a, b, c, Block[15], 10, $FE2CE6E0);
II(c, D, a, b, Block[6], 15, $A3014314);
II(b, c, D, a, Block[13], 21, $4E0811A1);
II(a, b, c, D, Block[4], 6, $F7537E82);
II(D, a, b, c, Block[11], 10, $BD3AF235);
II(c, D, a, b, Block[2], 15, $2AD7D2BB);
II(b, c, D, a, Block[9], 21, $EB86D391);
inc(State[0], a);
inc(State[1], b);
inc(State[2], c);
inc(State[3], D);
end;

procedure MD5Init(var Context: MD5Context);
begin
with Context do
begin
State[0] := $67452301;
State[1] := $EFCDAB89;
State[2] := $98BADCFE;
State[3] := $10325476;
Count[0] := 0;
Count[1] := 0;
ZeroMemory(@Buffer, SizeOf(MD5Buffer));
end;
end;

procedure MD5Update(var Context: MD5Context; Input: PAnsiChar;
Length: longword);
var
Index: longword;
PartLen: longword;
I: longword;
begin
with Context do
begin
Index := (Count[0] shr 3) and $3F;
inc(Count[0], Length shl 3);
if Count[0] < (Length shl 3) then
inc(Count[1]);
inc(Count[1], Length shr 29);
end;
PartLen := 64 - Index;
if Length >= PartLen then
begin
CopyMemory(@Context.Buffer[Index], Input, PartLen);
Transform(@Context.Buffer, Context.State);
I := PartLen;
while I + 63 < Length do
begin
Transform(@Input[I], Context.State);
inc(I, 64);
end;
Index := 0;
end
else
I := 0;
CopyMemory(@Context.Buffer[Index], @Input[I], Length - I);
end;

procedure MD5Final(var Context: MD5Context; var Digest: MD5Digest);
var
Bits: MD5CBits;
Index: longword;
PadLen: longword;
begin
Decode(@Context.Count, @Bits, 2);
Index := (Context.Count[0] shr 3) and $3F;
if Index < 56 then
PadLen := 56 - Index
else
PadLen := 120 - Index;
MD5Update(Context, @PADDING, PadLen);
MD5Update(Context, @Bits, 8);
Decode(@Context.State, @Digest, 4);
ZeroMemory(@Context, SizeOf(MD5Context));
end;

function MD5String(M: AnsiString): MD5Digest;
var
Context: MD5Context;
begin
MD5Init(Context);
MD5Update(Context, PAnsiChar(M), Length(M));
MD5Final(Context, Result);
end;

function MD5File(N: String): MD5Digest;
var
FileHandle: THandle;
MapHandle: THandle;
ViewPointer: pointer;
Context: MD5Context;
begin
MD5Init(Context);
FileHandle := CreateFile(PWideChar(WideString(N)), GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_SEQUENTIAL_SCAN, 0);
if FileHandle <> INVALID_HANDLE_VALUE then
try
MapHandle := CreateFileMapping(FileHandle, nil, PAGE_READONLY, 0, 0, nil);
if MapHandle <> 0 then
try
ViewPointer := MapViewOfFile(MapHandle, FILE_MAP_READ, 0, 0, 0);
if ViewPointer <> nil then
try
MD5Update(Context, ViewPointer, GetFileSize(FileHandle, nil));
finally
UnmapViewOfFile(ViewPointer);
end;
finally
CloseHandle(MapHandle);
end;
finally
CloseHandle(FileHandle);
end;
MD5Final(Context, Result);
end;

function MD5Print(D: MD5Digest): AnsiString;
var
I: Byte;
const
Digits: array [0 .. 15] of Ansichar = ('0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
begin
Result := '';
for I := 0 to 15 do
Result := Result + Digits[(D[I] shr 4) and $0F] + Digits[D[I] and $0F];
end;

function MD5Match(D1, D2: MD5Digest): boolean;
var
I: Byte;
begin
I := 0;
Result := TRUE;
while Result and (I < 16) do
begin
Result := D1[I] = D2[I];
inc(I);
end;
end;

function MD5S(Str: AnsiString): AnsiString;
begin
Result := MD5Print(MD5String(Str));
end;

function MD5F(FileName: AnsiString): AnsiString;
begin
Result := MD5Print(MD5File(string(FileName)));
end;

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

日本男人天堂网| 国内精品免费视频| 国产美女视频免费| 成人久久网站| 国产精品久久久久久久久久久久冷| 国产黄色精品| 视频一区视频二区视频三区视频四区国产| 亚洲精品国产精品国产自| 国产精品99蜜臀久久不卡二区| 国产欧美日本一区二区三区| 神马久久久久久久久| 成人全视频免费观看在线看| 1313精品午夜理伦电影| 国产精品2区| 美女视频久久久| 亚洲一区二区三区不卡国产欧美| 91国产福利在线| 欧美电影在线免费观看| 国产白丝网站精品污在线入口| 欧美专区亚洲专区| 午夜精品在线看| 成年人黄视频网站| 日日夜夜精品网站| 日本免费a视频| 亚洲性av网站| 成人免费a**址| 欧美日韩亚洲三区| 永久免费的av网站| 在线看国产日韩| 日本一级在线观看| 黄动漫在线看| 午夜激情在线视频| 国产精品露脸视频| 亚洲欧洲美洲在线综合| 538在线精品| 久久不见久久见国语| 久久久久九九九九| 午夜精品久久久久久久久久| 国产真实乱偷精品视频| 国产欧美日韩小视频| 日本午夜视频在线观看| 欧美另类极品videosbest视频| 黄色无遮挡网站| 欧美日韩成人一区二区| 亚洲人成网www| 成人欧美一区二区三区黑人免费| 自由的xxxx在线视频| 老牛影视av牛牛影视av| 91精品国产综合久久久久久豆腐| 欧洲在线视频一区| 日本成人手机在线| 国产精品无码永久免费888| 国产麻豆午夜三级精品| 在线观看欧美一区| 日韩精品一区二区不卡| 久久在精品线影院精品国产| 国产偷人妻精品一区二区在线| h视频免费在线| 亚洲成人中文在线| 在线成人av影院| 国产精品女同一区二区| 欧美日韩精品| 欧美一级生活片| 日韩av网站在线免费观看| 欧美丰满少妇xxxxx做受| 亚洲图片 自拍偷拍| 国产精品久久AV无码| 熟年交尾五十路视频在线播放| 国产午夜精品在线观看| 26uuu另类亚洲欧美日本老年| 国产香蕉视频在线| 日本福利午夜视频在线| 亚洲天堂网av在线| 狠狠人妻久久久久久综合麻豆| 国产黄网在线观看| 欧美激情日韩图片| 国产精品不卡一区| 国产一级一片免费播放| 精品中文字幕一区二区| 欧美一二三在线| 国产精品久免费的黄网站| 亚洲色图图片专区| 91丨九色丨蝌蚪丨老版| 午夜在线观看免费一区| 国产精品乱码久久久| 欧美自拍视频| 中国老头性行为xxxx| 日本一区二区三区视频在线播放| 午夜影院在线看| 色综合久久中文字幕综合网| 91精品导航| 草莓视频一区| 亚洲四区在线观看| av免费在线一区| 日韩在线观看视频网站| 高清视频一区二区| 一级黄色片在线免费观看| 日韩情爱电影在线观看| 91精品免费观看| 免费高清av| 免费国产a级片| 国产精品一区二区三区在线| 成人av免费在线播放| 国产视频一区二区在线播放| 秋霞精品一区二区三区| 日韩精品亚洲aⅴ在线影院| 制服丝袜av成人在线看| 色诱色偷偷久久综合| 色吊丝av中文字幕| 一区二区三区精品国产| 国产免费无码一区二区视频| 天天操天天碰| 99热这里只有精品1| 5月丁香婷婷综合| 国产福利91精品一区二区三区| 日韩精彩视频在线观看| 久久亚洲精品伦理| 亚洲精品99久久久久中文字幕| 久久久久亚洲蜜桃| 夜级特黄日本大片_在线| 中文国语毛片高清视频| 伦理电影国产精品| 日本77777| 国产精品性做久久久久久| 538国产精品一区二区免费视频| 无码h肉动漫在线观看| 天堂√在线观看一区二区| 亚洲美女视频一区| 国产精品.xx视频.xxtv| 精品国产麻豆免费人成网站| 亚洲欧美激情一区| 国语自产精品视频在线看8查询8| 色综合久久久无码中文字幕波多| 亚洲熟女乱综合一区二区三区| 国产探花一区二区三区| 九色视频成人porny| 国产精品久久久久免费a∨大胸| 国产亚洲精品精品国产亚洲综合| 午夜免费福利在线| 精品国产区在线| 一级全黄肉体裸体全过程| 亚洲精品粉嫩美女一区| 在线区一区二视频| 国产一区二区三区四区三区四| 色小子综合网| 欧美中文字幕在线观看视频| 日韩精品免费综合视频在线播放| 无吗不卡中文字幕| 午夜精品福利一区二区三区蜜桃| 欧美极品少妇与黑人| 国产精品人人妻人人爽| 国产无套内射又大又猛又粗又爽| 亚洲成人在线| 最新国产精品视频| 国产在线免费观看| 大香一本蕉伊线亚洲网| 意大利激情丛林无删减版dvd| 精品亚洲一区二区三区四区| 亚洲精品白虎| 日本韩国精品一区二区在线观看| 亚洲最大成人网4388xx| 国产综合久久久久| 一级片视频免费| 在线观看电影av| 夜夜狠狠擅视频| 久久精品国产亚洲精品| 六月婷婷综合网| 日本三级在线观看网站| 91骚色在线| 免费成人深夜天涯网站| 国产999视频| 免费网站在线高清观看| 男人透女人免费视频| 91丨porny丨首页| 伊人久久青青草| 在线观看91av| www.欧美免费| 精品xxxxxbbbb欧美中文| 久久视频这里只有精品| 精品久久久久中文慕人妻| 亚洲国产欧美一区二区三区同亚洲| 视频一区视频二区视频| 久久精品亚洲人成影院| 国内精品99| 欧美videos粗暴| 亚洲人免费视频| 亚洲欧美国产一区二区| 欧美片在线播放| 久久精品网址| 日韩成人动漫在线观看| 久久亚洲影视婷婷| 在线一区二区三区四区五区| 国产成人午夜精品5599| 少妇精品高潮欲妇又嫩中文字幕| 蜜桃91丨九色丨蝌蚪91桃色| 尤物视频在线观看| 91热门视频在线观看| 国产一区二区三区四区五区入口| 91色九色蝌蚪| 黄页视频在线观看| 免费人成在线不卡| 97精品一区二区三区| 国产成人无码一区二区在线观看| 精品一区毛片| 久久精品一级爱片| 日本不卡二三区| 青娱乐免费在线视频| 一区二区三区在线高清| 国产传媒一区二区| 国产在线久久久| 亚洲精品无码一区二区| 中文一区二区完整视频在线观看| 视频一区日韩| 国产黄色录像视频| 亚洲网站在线播放| 色婷婷综合网站| 欧美 日韩 国产在线| 在线精品91av| 99精品欧美一区二区三区| 热re66久久精品国产99re| 国产麻豆视频一区二区| 末成年女av片一区二区下载| 国产8mav视频| 亚洲成人一二三区| 超碰超碰在线| 熟女俱乐部一区二区| 国产亚洲欧美日韩高清| 蜜臀av国产精品久久久久| 国产亚洲一区二区三区| 好吊色免费视频| 亚洲va欧美va人人爽成人影院| 中文字幕乱码日本亚洲一区二区| 日日摸夜夜添夜夜添亚洲女人| 亚洲国产成人在线观看| 精品国产av无码| 亚洲色图图片| 天天久久综合网| 三级电影一区| 四虎成人免费影院| 国产精品欧美激情在线观看| 中文字幕在线网| 一区二区视频在线观看免费的| 麻豆精品视频| 激情小说 在线视频| 亚洲一区二区免费视频| 国产精品影视在线| 日韩精品首页| 不卡在线视频| 日本a在线播放| 九九热爱视频精品视频| 99在线视频观看| 免费精品国产自产拍观看| 国产一区二区免费在线| 丁香花免费高清完整在线播放| 90岁老太婆乱淫| 日韩中文字幕av在线| 最新中文字幕日本| 欧美伊人久久久久久久久影院| 国产真实精品久久二三区| 久久一区二区三区超碰国产精品| 久久不卡国产精品一区二区| 国产精品色婷婷| 久久久久黄久久免费漫画| 国产在线精品一区二区三区》| 中文字幕第69页| 中文字幕在线视频第一页| 九九热精品视频国产| 天天射天天拍| 中文字幕第8页| jazzjazz国产精品麻豆| 小早川怜子久久精品中文字幕| 欧美一区午夜精品| 免费观看成人高| 奇米888四色在线精品| 加勒比一区二区| 国产盗摄一区二区| 特级特黄刘亦菲aaa级| 日韩欧美中文在线| 91久久久久久久| 神马久久久久| 丰满爆乳一区二区三区| 成人综合在线视频| 91产国在线观看动作片喷水| h在线观看网站| av无码精品一区二区三区| 一个人看的视频www| 日本伊人午夜精品| 国产91丝袜在线18| 国产麻豆一精品一男同| 人妻一区二区三区免费| 激情六月天婷婷| 极品在线视频| 亚洲一区二区小说| 国产深夜精品福利| 午夜在线一区二区| 最新亚洲伊人网| 新天天拍日日拍狠狠拍| 欧美一区二区三区电影| 国产精品一香蕉国产线看观看| 男女下面一进一出无遮挡| 久久久精品影院| 欧美精品色哟哟| 福利视频电影| 欧美精品免费视频| 国产精品久久波多野结衣| bdsm精品捆绑chinese| 婷婷亚洲综合| 亚洲欧洲一级| 濑亚美莉大战黑人中文字幕| 成人亚洲综合色就1024| 中文字幕av观看| 欧美牲交a欧美牲交aⅴ免费下载| 久久久久99精品成人片三人毛片| 激情视频在线播放| 综合久久综合| 国产精品福利视频| 青青草视频在线免费观看| 天堂中文8资源在线8| 精品在线小视频| 九一在线免费观看| 国产精品久久久久久久久久久久久久久久久| 免费在线一区观看| 日韩国产精品一区| 国产一区 二区| 欧美专区在线视频| 久久久久亚洲AV成人无在| 中文字幕第80页| 国产一区二区三区综合|