📄 unit1.~cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
const AnsiString BaseTable="Cfg4hiFJKjk78WXY5VQRSTZabAINOqrPUl1xy32DEBcdemnoGHpstu6vwz0LM9+/=";
const AnsiString BaseTable1="4GsPuvDH3MNghQZaRxyi7AjkWF0wlz1EOf2BCST9UV6XYb5cdtIeJKLmn8opqr+/=";
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "Edit1"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
AnsiString TForm1::DecodeBase64(AnsiString Source)
{byte x1,x2,x3,x4,xt; int SrcLen,Times,i; AnsiString Result;
int a1=1,j11,j21,t1; AnsiString Result1,s1;
s1=Source;
t1=s1.Length();
for (a1;a1<t1+1;a1++)
{
if (a1==1){
j11=BaseTable1.Pos(s1[a1])-1;
if (j11>t1)
j11=j11-t1;
else
j11=j11+66-t1;
Result1=BaseTable1[j11];}
else
{
j21=BaseTable1.Pos(s1[a1])-1;
if (j21>=j11)
j11=j21-j11;
else
j11=j21+66-j11;
Result1+=BaseTable1[j11];
}
}
Source=Result1;
Result="";
SrcLen=Source.Length();
Times=SrcLen / 4;
for(i=0;i<Times;i++)
{x1=FindInTable(Source[1+i*4]);
x2=FindInTable(Source[2+i*4]);
x3=FindInTable(Source[3+i*4]);
x4=FindInTable(Source[4+i*4]);
x1<<=2;
xt=x2>>4;
x1=x1 | xt;
Result+=char(x1);
//ShowMessage(char(x1));
x2<<=4;
if (x3==64) break;//x3 不是"="号
xt=x3>>2;
x2=x2 | xt;
x3<<=6;
Result+=char(x2);
if (x4==64) break;
x3=x3 | x4;
Result+=char(x3);
}
return Result;
}
//---------------------------------------------------------------------------
AnsiString TForm1::EncodeBase64(AnsiString Source)
{int Times,LenSrc,i; unsigned char x1,x2,x3,x4,xt,xt1; AnsiString Result,s;
int a=1,g1,g2,t,j1,j2;
Result=""; //先置返回值为空
LenSrc=Source.Length(); //lensrc 为源字符串长度,source为源字符串;
if (LenSrc % 3==0)
Times=LenSrc/3; //如果源字符串长度为3的整数倍,Times为分组的个数
else
Times=LenSrc/3+1; //如果源字符串长度不为3的整数倍,Times为分组个数加1
for(i=0;i<Times;i++) //按分组次数循环加密
{if (LenSrc>=(3*i+3))
{xt=Source[1+i*3];
xt>>=2;
x1=BaseTable[xt+1];
xt=Source[1+i*3];
xt<<=4;
xt&=48;
xt1=Source[2+i*3];
xt1>>=4;
xt|=xt1;
x2=BaseTable[xt+1];
xt=Source[2+i*3];
xt<<=2;
xt&=60;
xt1=Source[3+i*3];
xt1>>=6;
xt|=xt1;
x3=BaseTable[xt+1];
xt=Source[3+i*3] ;
xt&=63;
x4=BaseTable[xt+1];}
else if (LenSrc>=3*i+2)
{xt=Source[1+i*3];
xt>>=2;
x1=BaseTable[xt+1];
xt=Source[1+i*3];
xt<<=4;
xt&=48;
xt1=Source[2+i*3];
xt1>>=4;
xt|=xt1;
x2=BaseTable[xt+1];
xt=Source[2+i*3];
xt<<=2;
xt&= 60;
x3=BaseTable[xt+1];
x4='=';}
else
{xt=Source[1+i*3];
xt>>=2;
x1=BaseTable[xt+1];
xt=Source[1+i*3] ;
xt<<=4;
xt&=48;
x2=BaseTable[xt+1];
x3='=';
x4='=';}
Result+=char(x1);
Result+=char(x2);
Result+=char(x3);
Result+=char(x4);
}
s=Result;
t=s.Length();
for (a;a<t+1;a++)
{
if (a==1){
j1=BaseTable1.Pos(s[a]);
j1=(j1+t)%66;
Result=BaseTable1[j1+1];}
else
{j1=BaseTable1.Pos(s[a-1]);
j2=BaseTable1.Pos(s[a]);
j1=(j2+j1)%66;
Result+=BaseTable1[j1+1];
}
}
return Result;
}
//---------------------------------------------------------------------------
byte TForm1::FindInTable(byte c)
{
//ShowMessage(char(c));
return BaseTable.Pos(char(c))-1;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Source;
Source=e1->Text;
e2->Text=EncodeBase64(Source);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
AnsiString Source;
Source=e3->Text;
e4->Text=DecodeBase64(Source);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -