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

📄 unit1.~cpp

📁 采用流密码加密/解密
💻 ~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 + -