亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? md5.pas

?? MD5算法的Delphi實現
?? PAS
字號:
unit md5;

interface

uses
  Windows;
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: pChar; Length: longword);
procedure MD5Final(var Context: MD5Context; var Digest: MD5Digest);
function MD5String(M: string): MD5Digest;
function MD5File(N: string): MD5Digest;
function MD5Print(D: MD5Digest): string;
function MD5Match(D1, D2: MD5Digest): boolean;
function GetMD5String(str:string):string ;

// -----------------------------------------------------------------------------------------------
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 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;
// -----------------------------------------------------------------------------------------------
// Encode Count bytes at Source into (Count / 4) DWORDs at Target

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;

// Decode Count DWORDs at Source into (Count * 4) Bytes at Target

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;
// Transform State according to first 64 bytes at Buffer

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;
// -----------------------------------------------------------------------------------------------
// Initialize given Context

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;
// Update given Context to include Length bytes of Input

procedure MD5Update(var Context: MD5Context; Input: pChar; 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;
// Finalize given Context, create Digest and zeroize Context

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;
// -----------------------------------------------------------------------------------------------
// Create digest of given Message

function MD5String(M: string): MD5Digest;

var
  Context: MD5Context;
begin
  MD5Init(Context);
  MD5Update(Context, pChar(M), length(M));
  MD5Final(Context, Result);
end;
// Create digest of file with given Name

function MD5File(N: string): MD5Digest;
var
  FileHandle: THandle;
  MapHandle: THandle;
  ViewPointer: pointer;
  Context: MD5Context;
begin
  MD5Init(Context);
  FileHandle := CreateFile(pChar(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;
// Create hex representation of given Digest

function MD5Print(D: MD5Digest): string;
var
  I: byte;
const
  Digits: array[0..15] of char =
  ('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;
// -----------------------------------------------------------------------------------------------
// Compare two Digests

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 GetMD5String(str:string):string ;
begin
  Result := MD5Print(MD5String(str));
end;  

end.

 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品国产a| 亚洲v日本v欧美v久久精品| aa级大片欧美| 婷婷综合另类小说色区| 国产三级三级三级精品8ⅰ区| 蜜桃视频免费观看一区| 欧美一区二区三区色| 国产91在线看| 日日夜夜精品免费视频| 国产精品久久久久婷婷| 99精品热视频| 久久99国产精品久久99果冻传媒| 精品国产乱码久久久久久牛牛 | 欧美xxxx老人做受| 99久久夜色精品国产网站| 丝袜美腿亚洲一区二区图片| 国产精品久久久久一区| 99精品久久99久久久久| 久久精品国产99久久6| 欧美精品一区二区三区蜜臀 | 日韩一区二区精品葵司在线| 99国产精品99久久久久久| 久久电影网站中文字幕| 亚洲国产日韩在线一区模特| 国产女同互慰高潮91漫画| 欧美大片在线观看一区| 欧亚一区二区三区| 亚洲精品一区二区三区蜜桃下载 | 色天使久久综合网天天| 国产精品一区二区三区99| 日本在线不卡一区| 久久久.com| 精品欧美久久久| 欧美精品自拍偷拍| 欧美午夜电影网| 日本视频一区二区| 亚洲高清免费观看高清完整版在线观看| 欧美精选一区二区| 色伊人久久综合中文字幕| 东方aⅴ免费观看久久av| 狠狠网亚洲精品| 久久电影网站中文字幕| 亚洲免费av高清| 国产精品初高中害羞小美女文| 欧美群妇大交群中文字幕| 一本色道**综合亚洲精品蜜桃冫| 日本欧美加勒比视频| 国产精品拍天天在线| 欧美激情一区二区三区在线| 欧美日韩精品一区二区| 欧美吻胸吃奶大尺度电影| 91久久人澡人人添人人爽欧美| 韩国av一区二区三区| 久久99精品久久久| 另类综合日韩欧美亚洲| 看电视剧不卡顿的网站| 久久99精品国产| 国产一本一道久久香蕉| 亚洲国产精品久久人人爱 | 国产精品久久看| 成人免费一区二区三区视频| 亚洲天堂免费看| 一区二区三区四区不卡视频 | 国产精品免费网站在线观看| 中文字幕精品三区| 国产精品三级久久久久三级| 国产精品成人网| 久久这里只有精品首页| 欧美理论在线播放| 日韩精品综合一本久道在线视频| 色婷婷亚洲一区二区三区| 在线观看www91| 制服.丝袜.亚洲.中文.综合| 91国偷自产一区二区使用方法| 不卡一区二区中文字幕| 欧美影院一区二区| 91精品国产品国语在线不卡 | 成人午夜又粗又硬又大| 成人sese在线| 色婷婷av一区二区三区软件| 欧美伦理视频网站| 精品久久久三级丝袜| 4hu四虎永久在线影院成人| 日韩欧美一区中文| 国产午夜亚洲精品不卡| 精品国产一区二区亚洲人成毛片| 在线播放欧美女士性生活| 日韩女优毛片在线| 国产亚洲一区二区三区| 亚洲一区在线看| 狠狠狠色丁香婷婷综合激情| 久久成人精品无人区| av色综合久久天堂av综合| 在线观看成人免费视频| 久久奇米777| 亚洲图片一区二区| 极品少妇一区二区| 99re这里只有精品视频首页| 7777精品伊人久久久大香线蕉的 | 日韩综合小视频| 国产精品123| 国产白丝精品91爽爽久久| 欧美又粗又大又爽| 日韩欧美国产三级电影视频| 中文字幕中文在线不卡住| 亚洲天天做日日做天天谢日日欢| 亚洲欧美激情视频在线观看一区二区三区| 中文字幕一区二区三| 三级成人在线视频| 成人ar影院免费观看视频| 欧美一级欧美三级在线观看| 中文字幕的久久| 日本欧美肥老太交大片| 91香蕉视频在线| 欧美最猛性xxxxx直播| 久久免费视频色| 五月天网站亚洲| 91小宝寻花一区二区三区| 2024国产精品视频| 视频一区视频二区在线观看| 成年人国产精品| 久久午夜电影网| 日韩高清不卡一区二区三区| 91网址在线看| 久久久精品日韩欧美| 日韩不卡在线观看日韩不卡视频| 久久99深爱久久99精品| 欧美裸体bbwbbwbbw| 亚洲欧美日韩国产手机在线| 国产成a人亚洲精| 欧美一区二区三区免费大片 | 亚洲免费在线看| 国产一区二区三区观看| 欧美精品在欧美一区二区少妇| 精品久久久久99| 中文字幕亚洲综合久久菠萝蜜| 亚洲欧美日韩在线不卡| 日本三级韩国三级欧美三级| 欧美图区在线视频| 亚洲视频在线一区| 波多野洁衣一区| 在线播放国产精品二区一二区四区| 久久综合视频网| 激情综合色综合久久| 99re在线精品| 日韩欧美高清dvd碟片| 五月天亚洲精品| 欧美年轻男男videosbes| 亚洲综合色网站| 欧美性大战xxxxx久久久| 樱桃视频在线观看一区| 91在线播放网址| 亚洲精品乱码久久久久| 91福利资源站| 亚洲一区二区三区自拍| 在线亚洲精品福利网址导航| 亚洲一区二区三区四区不卡| 国产精品香蕉一区二区三区| 久久久另类综合| 国产91高潮流白浆在线麻豆| 国产午夜精品一区二区| 国产精品一线二线三线精华| 久久免费精品国产久精品久久久久| 亚洲午夜精品17c| 欧美日韩在线播放一区| 首页国产丝袜综合| 日韩精品一区二区三区四区视频| 亚洲精品乱码久久久久久日本蜜臀| 国模冰冰炮一区二区| 国产日韩欧美综合在线| 成人一区在线观看| 亚洲天堂av一区| 欧美性大战久久久久久久蜜臀| 国产精品国产三级国产aⅴ中文 | 欧美精选在线播放| 美国一区二区三区在线播放| 久久无码av三级| 波波电影院一区二区三区| 久久精品一区蜜桃臀影院| 成人免费毛片a| 一区av在线播放| 97久久精品人人澡人人爽| 一区二区在线电影| 91麻豆精品国产自产在线观看一区| 亚洲一区二区三区小说| 97se亚洲国产综合自在线观| 亚洲va欧美va天堂v国产综合| 色综合欧美在线| 奇米777欧美一区二区| 欧美少妇xxx| 久久aⅴ国产欧美74aaa| 中文久久乱码一区二区| 精品视频在线免费观看| 精品影视av免费| 美女视频黄久久| 国产精品不卡一区二区三区| 欧美日韩国产精品自在自线| 国模一区二区三区白浆| 一区二区三区电影在线播| 日韩精品一区在线|