⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 synacode.pas

📁 delphi写的mib browser 源码,界面友好!
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  //begin decoding
  x:=pos(value[1],uut)-1;
  x:=round((x/3)*4);
  //x - lenght UU line
  s:=copy(value,2,x);
  if s='' then exit;
  result:=Decode4to3(s,uut);
end;

{==============================================================================}
{DecodeXX}
function DecodeXX(value:string):string;
var
  s:string;
  x:integer;
begin
  result:='';
  s:=trim(uppercase(value));
  if s='' then exit;
  if pos('BEGIN',s)=1 then exit;
  if pos('END',s)=1 then exit;
  //begin decoding
  x:=pos(value[1],TableXX)-1;
  x:=round((x/3)*4);
  //x - lenght XX line
  s:=copy(value,2,x);
  if s='' then exit;
  result:=Decode4to3(s,TableXX);
end;

{==============================================================================}
{UpdateCrc32}
function UpdateCrc32(value:byte;crc32:integer):integer;
begin
   result:=((crc32 shr 8) and Integer($00FFFFFF))
    xor crc32tab[byte(crc32 XOR integer(value)) and Integer($000000FF)];
end;

{==============================================================================}
{Crc32}
function Crc32(value:string):integer;
var
  n:integer;
begin
  result:=Integer($FFFFFFFF);
  for n:=1 to length(value) do
    result:=UpdateCrc32(ord(value[n]), result);
end;

{==============================================================================}
{UpdateCrc16}
function UpdateCrc16(value:byte;crc16:word):word;
begin
   result:=((crc16 shr 8) and $00FF)
    xor crc16tab[byte(crc16 XOR (word(value)) and $00FF)];
end;

{==============================================================================}
{Crc16}
function Crc16(value:string):word;
var
  n:integer;
begin
  result:=$FFFF;
  for n:=1 to length(value) do
    result:=UpdateCrc16(ord(value[n]), result);
end;

{==============================================================================}
procedure MD5Init(var MD5Context: TMD5Ctx);
begin
  FillChar(MD5Context, SizeOf(TMD5Ctx), #0);
  with MD5Context do begin
    State[0] := Integer($67452301);
    State[1] := Integer($EFCDAB89);
    State[2] := Integer($98BADCFE);
    State[3] := Integer($10325476);
  end
end;

procedure MD5Transform(var Buf:array of LongInt; const Data:array of LongInt);
var
  A,B,C,D: LongInt;

  procedure Round1(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte);
  begin
    Inc(W, (Z xor (X and (Y xor Z))) + Data);
    W := (W shl S) or (W shr (32 - S));
    Inc(W, X)
  end;

  procedure Round2(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte);
  begin
    Inc(W, (Y xor (Z and (X xor Y))) + Data);
    W := (W shl S) or (W shr (32 - S));
    Inc(W, X)
  end;

  procedure Round3(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte);
  begin
    Inc(W, (X xor Y xor Z) + Data);
    W := (W shl S) or (W shr (32 - S));
    Inc(W, X)
  end;

  procedure Round4(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte);
  begin
    Inc(W, (Y xor (X or not Z)) + Data);
    W := (W shl S) or (W shr (32 - S));
    Inc(W, X)
  end;
begin
  A:=Buf[0];
  B:=Buf[1];
  C:=Buf[2];
  D:=Buf[3];

  Round1(A,B,C,D, Data[ 0] + longint($d76aa478),  7);
  Round1(D,A,B,C, Data[ 1] + longint($e8c7b756), 12);
  Round1(C,D,A,B, Data[ 2] + longint($242070db), 17);
  Round1(B,C,D,A, Data[ 3] + longint($c1bdceee), 22);
  Round1(A,B,C,D, Data[ 4] + longint($f57c0faf),  7);
  Round1(D,A,B,C, Data[ 5] + longint($4787c62a), 12);
  Round1(C,D,A,B, Data[ 6] + longint($a8304613), 17);
  Round1(B,C,D,A, Data[ 7] + longint($fd469501), 22);
  Round1(A,B,C,D, Data[ 8] + longint($698098d8),  7);
  Round1(D,A,B,C, Data[ 9] + longint($8b44f7af), 12);
  Round1(C,D,A,B, Data[10] + longint($ffff5bb1), 17);
  Round1(B,C,D,A, Data[11] + longint($895cd7be), 22);
  Round1(A,B,C,D, Data[12] + longint($6b901122),  7);
  Round1(D,A,B,C, Data[13] + longint($fd987193), 12);
  Round1(C,D,A,B, Data[14] + longint($a679438e), 17);
  Round1(B,C,D,A, Data[15] + longint($49b40821), 22);

  Round2(A,B,C,D, Data[ 1] + longint($f61e2562),  5);
  Round2(D,A,B,C, Data[ 6] + longint($c040b340),  9);
  Round2(C,D,A,B, Data[11] + longint($265e5a51), 14);
  Round2(B,C,D,A, Data[ 0] + longint($e9b6c7aa), 20);
  Round2(A,B,C,D, Data[ 5] + longint($d62f105d),  5);
  Round2(D,A,B,C, Data[10] + longint($02441453),  9);
  Round2(C,D,A,B, Data[15] + longint($d8a1e681), 14);
  Round2(B,C,D,A, Data[ 4] + longint($e7d3fbc8), 20);
  Round2(A,B,C,D, Data[ 9] + longint($21e1cde6),  5);
  Round2(D,A,B,C, Data[14] + longint($c33707d6),  9);
  Round2(C,D,A,B, Data[ 3] + longint($f4d50d87), 14);
  Round2(B,C,D,A, Data[ 8] + longint($455a14ed), 20);
  Round2(A,B,C,D, Data[13] + longint($a9e3e905),  5);
  Round2(D,A,B,C, Data[ 2] + longint($fcefa3f8),  9);
  Round2(C,D,A,B, Data[ 7] + longint($676f02d9), 14);
  Round2(B,C,D,A, Data[12] + longint($8d2a4c8a), 20);

  Round3(A,B,C,D, Data[ 5] + longint($fffa3942),  4);
  Round3(D,A,B,C, Data[ 8] + longint($8771f681), 11);
  Round3(C,D,A,B, Data[11] + longint($6d9d6122), 16);
  Round3(B,C,D,A, Data[14] + longint($fde5380c), 23);
  Round3(A,B,C,D, Data[ 1] + longint($a4beea44),  4);
  Round3(D,A,B,C, Data[ 4] + longint($4bdecfa9), 11);
  Round3(C,D,A,B, Data[ 7] + longint($f6bb4b60), 16);
  Round3(B,C,D,A, Data[10] + longint($bebfbc70), 23);
  Round3(A,B,C,D, Data[13] + longint($289b7ec6),  4);
  Round3(D,A,B,C, Data[ 0] + longint($eaa127fa), 11);
  Round3(C,D,A,B, Data[ 3] + longint($d4ef3085), 16);
  Round3(B,C,D,A, Data[ 6] + longint($04881d05), 23);
  Round3(A,B,C,D, Data[ 9] + longint($d9d4d039),  4);
  Round3(D,A,B,C, Data[12] + longint($e6db99e5), 11);
  Round3(C,D,A,B, Data[15] + longint($1fa27cf8), 16);
  Round3(B,C,D,A, Data[ 2] + longint($c4ac5665), 23);

  Round4(A,B,C,D, Data[ 0] + longint($f4292244),  6);
  Round4(D,A,B,C, Data[ 7] + longint($432aff97), 10);
  Round4(C,D,A,B, Data[14] + longint($ab9423a7), 15);
  Round4(B,C,D,A, Data[ 5] + longint($fc93a039), 21);
  Round4(A,B,C,D, Data[12] + longint($655b59c3),  6);
  Round4(D,A,B,C, Data[ 3] + longint($8f0ccc92), 10);
  Round4(C,D,A,B, Data[10] + longint($ffeff47d), 15);
  Round4(B,C,D,A, Data[ 1] + longint($85845dd1), 21);
  Round4(A,B,C,D, Data[ 8] + longint($6fa87e4f),  6);
  Round4(D,A,B,C, Data[15] + longint($fe2ce6e0), 10);
  Round4(C,D,A,B, Data[ 6] + longint($a3014314), 15);
  Round4(B,C,D,A, Data[13] + longint($4e0811a1), 21);
  Round4(A,B,C,D, Data[ 4] + longint($f7537e82),  6);
  Round4(D,A,B,C, Data[11] + longint($bd3af235), 10);
  Round4(C,D,A,B, Data[ 2] + longint($2ad7d2bb), 15);
  Round4(B,C,D,A, Data[ 9] + longint($eb86d391), 21);

  Inc(Buf[0],A);
  Inc(Buf[1],B);
  Inc(Buf[2],C);
  Inc(Buf[3],D);
end;

procedure MD5Update(var MD5Context:TMD5Ctx; const Data:string);
var
  Index,t,len:integer;
begin
  len:=length(data);
  with MD5Context do
    begin
      T:=Count[0];
      Inc(Count[0], Len shl 3);
      if Count[0]<T then
        Inc(Count[1]);
      Inc(Count[1], Len shr 29);
      T:=(T shr 3) and $3F;
      Index:=0;
      if T<>0 then
        begin
          Index:=T;
          T:=64-T;
          if Len<T then
            begin
              Move(Data, Bufchar[Index], Len);
              Exit;
            end;
          Move(Data, Bufchar[Index], T);
          MD5Transform(State, Buflong);
          Dec(Len, T);
          Index:=T;
        end;
      while Len>=64 do
        begin
          Move(Data[Index+1], Bufchar, 64);
          MD5Transform(State, Buflong);
          Inc(Index, 64);
          Dec(Len, 64);
        end;
      Move(Data[Index+1], Bufchar, Len);
    end
end;

function MD5Final(var MD5Context: TMD5Ctx):string;
var
  Cnt : Word;
  P   : Byte;
  digest:array[0..15] of Char;
  i:integer;
begin
  for I:=0 to 15 do
    Byte(Digest[I]):=I+1;
  with MD5Context do
    begin
      Cnt:=(Count[0] shr 3) and $3F;
      P:=Cnt;
      BufChar[P]:=$80;
      Inc(P);
      Cnt:=64-1-Cnt;
      if Cnt<8 then
        begin
          FillChar(BufChar[P], Cnt, #0);
          MD5Transform(State, BufLong);
          FillChar(BufChar, 56, #0);
        end
      else fillChar(BufChar[P], Cnt-8, #0);
      BufLong[14] := Count[0];
      BufLong[15] := Count[1];
      MD5Transform(State, BufLong);
      Move(State, Digest, 16);
      result:='';
      for i:=0 to 15 do
        result:=result+char(digest[i]);
    end;
  FillChar(MD5Context, SizeOf(TMD5Ctx), #0)
end;

{==============================================================================}
{MD5}
function MD5(value:string): string;
var
  MD5Context : TMD5Ctx;
begin
  MD5Init(MD5Context);
  MD5Update(MD5Context,value);
  result:=MD5Final(MD5Context);
end;

{==============================================================================}
{HMAC_MD5}
function HMAC_MD5(text,key:string):string;
var
  ipad,opad,s:string;
  n:integer;
  MD5Context : TMD5Ctx;
begin
  if length(key)>64 then
    key:=md5(key);
  ipad:='';
  for n:=1 to 64 do
    ipad:=ipad+#$36;
  opad:='';
  for n:=1 to 64 do
    opad:=opad+#$5c;
  for n:=1 to length(key) do
    begin
      ipad[n]:=char(byte(ipad[n]) xor byte(key[n]));
      opad[n]:=char(byte(opad[n]) xor byte(key[n]));
    end;
  MD5Init(MD5Context);
  MD5Update(MD5Context,ipad);
  MD5Update(MD5Context,text);
  s:=MD5Final(MD5Context);
  MD5Init(MD5Context);
  MD5Update(MD5Context,opad);
  MD5Update(MD5Context,s);
  result:=MD5Final(MD5Context);
end;

{==============================================================================}

begin
  exit;
  asm
    db 'Synapse coding and decoding support library by Lukas Gebauer',0
  end;
end.


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -