Base64 кодирование
functionDecode(
const S: AnsiString): AnsiString;
const
Map:
array[Char]
of Byte = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 52, 53,
54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30,
31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0);
var
I: LongInt;
begin
case Length(S)
of
2:
begin
I := Map[S[1]] + (Map[S[2]]
shl 6);
SetLength(Result, 1);
Move(I, Result[1], Length(Result))
end;
3:
begin
I := Map[S[1]] + (Map[S[2]]
shl 6) + (Map[S[3]]
shl 12);
SetLength(Result, 2);
Move(I, Result[1], Length(Result))
end;
4:
begin
I := Map[S[1]] + (Map[S[2]]
shl 6) + (Map[S[3]]
shl 12) +
(Map[S[4]]
shl 18);
SetLength(Result, 3);
Move(I, Result[1], Length(Result))
end
end
end;
function Encode(
const S: AnsiString): AnsiString;
const
Map:
array[0..63]
of Char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +
'abcdefghijklmnopqrstuvwxyz0123456789+/';
var
I: LongInt;
begin
I := 0;
Move(S[1], I, Length(S));
case Length(S)
of
1:
Result := Map[I
mod 64] + Map[(I
shr 6)
mod 64];
2:
Result := Map[I
mod 64] + Map[(I
shr 6)
mod 64] +
Map[(I
shr 12)
mod 64];
3:
Result := Map[I
mod 64] + Map[(I
shr 6)
mod 64] +
Map[(I
shr 12)
mod 64] + Map[(I
shr 18)
mod 64]
end
end;
Взято с сайта
type TAByte =
array [0..maxInt-1]
of byte;
type TPAByte = ^TAByte;
function Encode(data:
string) :
string; overload;
const b64 :
array [0..63]
of char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
var ic,len : integer;
pi, po : TPAByte;
c1 : dword;
begin
len:=length(data);
if len > 0
then begin
SetLength(result, ((len + 2)
div 3) * 4);
pi := pointer(data);
po := pointer(result);
for ic := 1
to len
div 3
do begin
c1 := pi^[0]
shl 16 + pi^[1]
shl 8 + pi^[2];
po^[0] := byte(b64[(c1
shr 18)
and $3f]);
po^[1] := byte(b64[(c1
shr 12)
and $3f]);
po^[2] := byte(b64[(c1
shr 6)
and $3f]);
po^[3] := byte(b64[(c1 )
and $3f]);
inc(dword(po), 4);
inc(dword(pi), 3);
end;
case len
mod 3
of
1 :
begin
c1 := pi^[0]
shl 16;
po^[0] := byte(b64[(c1
shr 18)
and $3f]);
po^[1] := byte(b64[(c1
shr 12)
and $3f]);
po^[2] := byte('=');
po^[3] := byte('=');
end;
2 :
begin
c1 := pi^[0]
shl 16 + pi^[1]
shl 8;
po^[0] := byte(b64[(c1
shr 18)
and $3f]);
po^[1] := byte(b64[(c1
shr 12)
and $3f]);
po^[2] := byte(b64[(c1
shr 6)
and $3f]);
po^[3] := byte('=');
end;
end;
end else
result := '';
end;
function Decode(data:
string) :
string; overload;
var i1,i2,len : integer;
pi, po : TPAByte;
ch1 : char;
c1 : dword;
begin
len:=length(data);
if (len > 0)
and (len
mod 4 = 0)
then begin
len := len
shr 2;
SetLength(result, len * 3);
pi := pointer(data);
po := pointer(result);
for i1 := 1
to len
do begin
c1 := 0;
i2 := 0;
while true
do begin
ch1 := char(pi^[i2]);
case ch1
of
'A'..'Z' : c1 := c1
or (dword(ch1) - byte('A') );
'a'..'z' : c1 := c1
or (dword(ch1) - byte('a') + 26);
'0'..'9' : c1 := c1
or (dword(ch1) - byte('0') + 52);
'+' : c1 := c1
or 62;
'/' : c1 := c1
or 63;
else begin
if i2 = 3
then begin
po^[0] := c1
shr 16;
po^[1] := byte(c1
shr 8);
SetLength(result, Length(result) - 1);
end else begin
po^[0] := c1
shr 10;
SetLength(result, Length(result) - 2);
end;
exit;
end;
end;
if i2 = 3
then
break;
inc(i2);
c1 := c1
shl 6;
end;
po^[0] := c1
shr 16;
po^[1] := byte(c1
shr 8);
po^[2] := byte(c1);
inc(dword(pi), 4);
inc(dword(po), 3);
end;
end else
result := '';
end;
....
var a,b:
string;
begin
a:='aaa';
b:=Encode( a );
showmessage( b );
a:=Decode( b );
showmessage( a );
Автор P.O.D.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий