好吧!!! 解码: Function Chr2Base( c:char ):Byte; begin if ( c >= 'A')and( c <= 'Z' ) then result:= Byte ( ord(c) - ord('A') ) else if (c >= 'a') and (c <= 'z' ) then result:= Byte ( ord(c) - ord('a') + 26 ) else if ( c >= '0' )and( c <= '9' ) then result:= Byte ( ord(c) - ord('0') + 52 ) else if ( c = '+' ) then result:=62 else result:=63; end;function Base64Decode( s:String ):String; var n,i:integer; c,t:byte; asTemp:string; begin n :=Length(s ); for i:= 1 to n do begin if ( s[i] = '=' ) then break; c := Chr2Base( s[i] ); if ( i mod 4 = 1 ) then t := c shl 2 else if ( i mod 4 = 2 ) then begin asTemp :=asTemp+char( t or ( c shr 4 ) ); t := Byte ( c shl 4 ); end else if ( i mod 4 = 3 ) then begin asTemp :=asTemp+char( t or ( c shr 2 ) ); t := Byte ( c shl 6 ); end else asTemp :=asTemp+char( t or c ); end; result:=asTemp; end;编码:时间来不及了,我先把C语言的贴出来,还没有验证过,你自己试试,上面的解码函数是正确的,因为我有个读邮件程序就是用它。你可以翻成Delphi下的,然后解码的程序来验证。char Hex2Chr( Byte n ) { n &= 0xF; if ( n < 10 ) return ( char )( n + '0' ); else return ( char )( n - 10 + 'A' ); } //--------------------------------------------------------------------------- // char 0-F to 4bit binary Byte Chr2Hex( char c ) { c = toupper( c ); if ( c >= '0' && c <= '9' ) return ( int )( c - '0' ); else if ( c >= 'A' && c <= 'F' ) return ( int )( c - 'A' + 10 ); else return -1; } //--------------------------------------------------------------------------- // Base64 code table // 0-63 : A-Z(25) a-z(51), 0-9(61), +(62), /(63) char __fastcall Base2Chr( Byte n ) { n &= 0x3F; if ( n < 26 ) return ( char )( n + 'A' ); else if ( n < 52 ) return ( char )( n - 26 + 'a' ); else if ( n < 62 ) return ( char )( n - 52 + '0' ); else if ( n == 62 ) return '+'; else return '/'; } //--------------------------------------------------------------------------- Byte Chr2Base( char c ) //这个函数我上面已经换过了,编码时不需要。 { if ( c >= 'A' && c <= 'Z' ) return ( Byte )( c - 'A' ); else if ( c >= 'a' && c <= 'z' ) return ( Byte )( c - 'a' + 26 ); else if ( c >= '0' && c <= '9' ) return ( Byte )( c - '0' + 52 ); else if ( c == '+' ) return 62; else return 63; } //--------------------------------------------------------------------------- AnsiString Base64Encode( AnsiString s ) { int n = s.Length( ); Byte c, t; AnsiString asTemp = ""; for ( int i = 1; i <= n; i++ ) { c = s[i]; if ( i % 3 == 1 ) { asTemp += Base2Chr( c >> 2 ); t = ( c << 4 ) & 0x3F; } else if ( i % 3 == 2 ) { asTemp += Base2Chr( t | ( c >> 4 ) ); t = ( c << 2 ) & 0x3F; } else { asTemp += Base2Chr( t | ( c >> 6 ) ); asTemp += Base2Chr( c ); } } if ( n % 3 != 0 ) { asTemp += Base2Chr( t ); if ( n % 3 == 1 ) asTemp += "=="; else asTemp += "="; } return asTemp; }
解码:
Function Chr2Base( c:char ):Byte;
begin
if ( c >= 'A')and( c <= 'Z' ) then
result:= Byte ( ord(c) - ord('A') )
else if (c >= 'a') and (c <= 'z' ) then
result:= Byte ( ord(c) - ord('a') + 26 )
else if ( c >= '0' )and( c <= '9' ) then
result:= Byte ( ord(c) - ord('0') + 52 )
else if ( c = '+' ) then
result:=62
else
result:=63;
end;function Base64Decode( s:String ):String;
var
n,i:integer;
c,t:byte;
asTemp:string;
begin
n :=Length(s );
for i:= 1 to n do
begin
if ( s[i] = '=' ) then
break;
c := Chr2Base( s[i] );
if ( i mod 4 = 1 ) then
t := c shl 2
else if ( i mod 4 = 2 ) then
begin
asTemp :=asTemp+char( t or ( c shr 4 ) );
t := Byte ( c shl 4 );
end
else if ( i mod 4 = 3 ) then
begin
asTemp :=asTemp+char( t or ( c shr 2 ) );
t := Byte ( c shl 6 );
end
else
asTemp :=asTemp+char( t or c );
end;
result:=asTemp;
end;编码:时间来不及了,我先把C语言的贴出来,还没有验证过,你自己试试,上面的解码函数是正确的,因为我有个读邮件程序就是用它。你可以翻成Delphi下的,然后解码的程序来验证。char Hex2Chr( Byte n )
{
n &= 0xF;
if ( n < 10 )
return ( char )( n + '0' );
else
return ( char )( n - 10 + 'A' );
}
//---------------------------------------------------------------------------
// char 0-F to 4bit binary
Byte Chr2Hex( char c )
{
c = toupper( c );
if ( c >= '0' && c <= '9' )
return ( int )( c - '0' );
else if ( c >= 'A' && c <= 'F' )
return ( int )( c - 'A' + 10 );
else
return -1;
}
//---------------------------------------------------------------------------
// Base64 code table
// 0-63 : A-Z(25) a-z(51), 0-9(61), +(62), /(63)
char __fastcall Base2Chr( Byte n )
{
n &= 0x3F;
if ( n < 26 )
return ( char )( n + 'A' );
else if ( n < 52 )
return ( char )( n - 26 + 'a' );
else if ( n < 62 )
return ( char )( n - 52 + '0' );
else if ( n == 62 )
return '+';
else
return '/';
}
//---------------------------------------------------------------------------
Byte Chr2Base( char c ) //这个函数我上面已经换过了,编码时不需要。
{
if ( c >= 'A' && c <= 'Z' )
return ( Byte )( c - 'A' );
else if ( c >= 'a' && c <= 'z' )
return ( Byte )( c - 'a' + 26 );
else if ( c >= '0' && c <= '9' )
return ( Byte )( c - '0' + 52 );
else if ( c == '+' )
return 62;
else
return 63;
}
//---------------------------------------------------------------------------
AnsiString Base64Encode( AnsiString s )
{
int n = s.Length( );
Byte c, t;
AnsiString asTemp = ""; for ( int i = 1; i <= n; i++ )
{
c = s[i];
if ( i % 3 == 1 )
{
asTemp += Base2Chr( c >> 2 );
t = ( c << 4 ) & 0x3F;
}
else if ( i % 3 == 2 )
{
asTemp += Base2Chr( t | ( c >> 4 ) );
t = ( c << 2 ) & 0x3F;
}
else
{
asTemp += Base2Chr( t | ( c >> 6 ) );
asTemp += Base2Chr( c );
}
}
if ( n % 3 != 0 )
{
asTemp += Base2Chr( t );
if ( n % 3 == 1 )
asTemp += "==";
else
asTemp += "=";
}
return asTemp;
}