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

📄 base64.pas

📁 几和经典的加密方法有md5,base64,crc,des等几和经典的加密方法有md5,base64,crc,des等
💻 PAS
字号:
unit Base64;

 

interface

 

uses SysUtils;

 

function StrToBase64(const str: string): string;

function Base64ToStr(const Base64: string): string;

 

implementation

 

//const

//  Base64_Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

 

function StrToBase64(const Str: string): string;

var

  I, J, K, Len, Len1: Integer;

  B3: array[0..2] of Byte;

  B4: array[0..3] of Byte;

begin

  if Str = '' then

  begin

    Result := '';

    Exit;

  end;

  Len := Length(Str);

  Len1 := ((Len + 2) div 3) shl 2;

  SetString(Result, nil, Len1);

  I := 1;

  J := 1;

  while I <= Len do

  begin

    for K := 0 to 2 do

      if K + I > Len then B3[K] := 0

      else B3[K] := Ord(Str[K + I]);

    B4[0] := B3[0] shr 2;

    B4[1] := ((B3[0] shl 4) or (B3[1] shr 4)) and 63;

    B4[2] := ((B3[1] shl 2) or (B3[2] shr 6)) and 63;

    B4[3] := B3[2] and 63;

    for K := 0 to 3 do

    begin

      case B4[K] of

        0..25: Result[J] := Chr(B4[K] + 65);   // 'A'..'Z'

        26..51: Result[J] := Chr(B4[K] + 71);  // 'a'..'z'(B4[K]-26+97)

        62: Result[J] := '+';

        63: Result[J] := '/';

      else Result[J] := Chr(B4[K] - 4);        // '0'..'9'(B4[K]-52+48)

      end;

//      Result[J] := Base64_Chars[B4[K] + 1];

      Inc(J);

    end;

    Inc(I, 3);

  end;

  K := 3 - Len mod 3 - 1;

  if K <> 2 then

    for I := Len1 - K to Len1 do

      Result[I] := '=';

end;

 

function Base64ToStr(const Base64: string): string;

var

  I, J, K, Len, Len1: Integer;

  B4: array[0..3] of Byte;

begin

  if Base64 = '' then

  begin

    Result := '';

    Exit;

  end;

  Len := Length(Base64);

  if Len and 3 <> 0 then

    raise Exception.Create('Invalid Base64 length');

  Len1 := (Len shr 2) * 3;

  SetString(Result, nil, Len1);

  I := 1;

  J := 1;

  while I <= Len do

  begin

    for K := 0 to 3 do

    begin

      case Base64[I] of

        'A'..'Z': B4[K] := Ord(Base64[I]) - 65;

        'a'..'z': B4[K] := Ord(Base64[I]) - 71;

        '0'..'9': B4[K] := Ord(Base64[I]) + 4;

        '+': B4[K] := 62;

        '/': B4[K] := 63;

        '=': B4[K] := 0;

      else raise Exception.CreateFmt('#%d: Invalid char in Base64', [Ord(Base64[I])]);

      end;

      Inc(I);

    end;

    Result[J] := Chr((B4[0] shl 2) or (B4[1] shr 4));

    Result[J + 1] := Chr((B4[1] shl 4) or (B4[2] shr 2));

    Result[J + 2] := Chr((B4[2] shl 6) or B4[3]);

    Inc(J, 3);

  end;

 

  I := Pos('=', Base64);

  if I <> 0 then

  begin

    I := Len - I + 1;

    Delete(Result, Len1 - I + 1, I);

  end;

 

end;

 

end.


⌨️ 快捷键说明

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