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

📄 unit1.~cpp

📁 此为古典密码学四种加密解密方式的源码及exe文件
💻 ~CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString PlainText,ChiperText;
int k,len,temp1,temp2;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------






void __fastcall TForm1::Shift_ChiperClick(TObject *Sender)
{
   if(real_score1->Text==""||key1->Text=="")
     {ShowMessage("请确认明文和密钥输入完整");return;}
  k=StrToInt(key1->Text);
  if(k<0||k>25)
  {
      ShowMessage("密钥只能为0~25中的整数");
      key1->Text="";
      return;
  }
  PlainText=real_score1->Text;
  len=PlainText.Length();
  for(int i=1;i<=len;i++)
  {
      temp1=PlainText[i];
      temp2=temp1+k;
      if(temp1!=' '&&temp1<65||temp1>90&&temp1<97||temp1>122)
          {ShowMessage("明文中不能含有字母和空格以外的字符");return;}
      if(PlainText[i]!=' ')
      {
          
          if(temp1<=90&&temp1>=65&&temp2<=90||temp1<=122&&temp1>=97&&temp2<=122)
              PlainText[i]=temp2;
          else
              PlainText[i]=temp2-26;
      }
  }
      sec_Result1->Text=PlainText;
}
//---------------------------------------------------------------------------



void __fastcall TForm1::antiShift_ChiperClick(TObject *Sender)
{
   if(secret_score1->Text==""||antikey1->Text=="")
     {ShowMessage("请确认明文和密钥输入完整");return;}
  k=StrToInt(antikey1->Text);
  if(k<0||k>25)
  {
      ShowMessage("密钥只能为0~25中的整数");
      antikey1->Text="";
      return;
  }
  ChiperText=secret_score1->Text;
  len=ChiperText.Length();
  for(int i=1;i<=len;i++)
  {
      if(ChiperText[i]!=' ')
      {
          temp1=ChiperText[i];
          temp2=temp1-k;
          if(temp1>=65&&temp1<=90&&temp2>=65||temp1>=97&&temp1<=122&&temp2>=97)
              ChiperText[i]=temp2;
          else
              ChiperText[i]=temp2+26;
      }
  }
  real_Result1->Text=ChiperText;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::anti_ShiftChiperClick(TObject *Sender)
{
  secret_score1->Text=sec_Result1->Text;
  antikey1->Text=key1->Text;
  antiShift_ChiperClick(Sender);
  if(real_score1->Text==real_Result1->Text)
  ShowMessage("加密与解密过程正确");
  else ShowMessage("加密与解密过程有错");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button13Click(TObject *Sender)
{
   real_score1->Text="";
   key1->Text="";
   sec_Result1->Text="";
   secret_score1->Text="";
   antikey1->Text="";
   real_Result1->Text="";

   real_score2->Text="";
   key2_a->Text="";
   key2_b->Text="";
   sec_Result2->Text="";
   secret_score2->Text="";
   antikey2_a->Text="";
   antikey2_b->Text="";
   real_Result2->Text="";

   real_score3->Text="";
   key3->Text="";
   sec_Result3->Text="";
   secret_score3->Text="";
   antikey3->Text="";
   real_Result3->Text="";

   e_Plain->Text="";
   e_Key->Text="";
   sec_Result4->Text="";
   e_Clipher->Text="";
   anti_Key->Text="";
   real_Result4->Text="";
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button14Click(TObject *Sender)
{
   Form1->Close();        
}
//---------------------------------------------------------------------------
int gcd(int a)
{int c=26,t;
  while(c!=0) {t=a%c;a=c;c=t;}
   if(a==1) return 1;
   else ShowMessage("密钥不合法");
   return 0;
}


void __fastcall TForm1::Affine_ChiperClick(TObject *Sender)
{
   int a,b;
   if(real_score2->Text==""||key2_a->Text==""||key2_b->Text=="")
     {ShowMessage("请确认明文和密钥输入完整");return;}
   a=key2_a->Text.ToInt();
   if(gcd(a)!=1)return;

  PlainText=real_score2->Text;
  len=PlainText.Length();
  b=key2_b->Text.ToInt();
  for(int i=1;i<=len;i++)
      if(PlainText[i]!=' ')
      {
          if(PlainText[i]>=65&&PlainText[i]<=90)
              PlainText[i]=(a*(PlainText[i]-65)+b)%26+65;
          else if(PlainText[i]>=97&&PlainText[i]<=122)
                   PlainText[i]=(a*(PlainText[i]-97)+b)%26+97;
      }
  sec_Result2->Text=PlainText;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::antiAffine_ChiperClick(TObject *Sender)
{
  int i,j=0,array[12]={3,5,6,9,0,1,21,17,14,10,24,7};
  int a,b;
  ChiperText=secret_score2->Text;
  len=ChiperText.Length();
  a=antikey2_a->Text.ToInt();
  b=antikey2_b->Text.ToInt();
  while((a*array[j])%26!=1)  j++;
  a=array[j];
  for(i=1;i<=len;i++)
      if(ChiperText[i]!=' ')
      {
          if(ChiperText[i]>=65&&ChiperText[i]<=90)
              ChiperText[i]=(a*(ChiperText[i]-65-b+26))%26+65;
          else if(ChiperText[i]>=97&&ChiperText[i]<=122)
                   ChiperText[i]=(a*(ChiperText[i]-97-b+26))%26+97;
      }
  real_Result2->Text=ChiperText;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::anti_AffineChiperClick(TObject *Sender)
{
  secret_score2->Text=sec_Result2->Text;
  antikey2_a->Text=key2_a->Text;
  antikey2_b->Text=key2_b->Text;
  antiAffine_ChiperClick(Sender);
  if(real_score2->Text==real_Result2->Text)
  ShowMessage("加密与解密过程正确");
  else ShowMessage("加密与解密过程有错");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Vigenere_ChiperClick(TObject *Sender)
{
   if(real_score3->Text==""||key3->Text=="")
      {ShowMessage("请确认明文和密钥输入完整");return;}
  PlainText=real_score3->Text;
  AnsiString keytext=key3->Text;
  len=PlainText.Length();
  int len_Key=keytext.Length();
  for(int i=1,j=1;i<=len;i++)
  {
      temp1=PlainText[i];
      if(temp1!=' '&&temp1<65||temp1>90&&temp1<97||temp1>122)
          {ShowMessage("请正确输入明文(只能输入字母和空格)");return;}
      if(keytext[j]<65||keytext[j]>90&&keytext[j]<97||keytext[j]>122)
          {ShowMessage("密钥中不能含有字母以外的字符,请重新输入");return;}
      if(keytext[j]>=97&&keytext[j]<=122)
           temp2=temp1+(keytext[j]-97);
      else if(keytext[j]>=65&&keytext[j]<=90)
          temp2=temp1+(keytext[j]-65);
      if(PlainText[i]!=' ')
      {

          if(temp1<=90&&temp1>=65&&temp2<=90||temp1<=122&&temp1>=97&&temp2<=122)
              PlainText[i]=temp2;
          else
              PlainText[i]=temp2-26;
          if(j+1>len_Key) j=1;
          else j++ ;
      }
  }
  sec_Result3->Text=PlainText;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::antiVigenere_ChiperClick(TObject *Sender)
{
  if(secret_score3->Text==""||antikey3->Text=="")
      {ShowMessage("请确认明文和密钥输入完整");return;}
  ChiperText=secret_score3->Text;
  AnsiString keytext=antikey3->Text;
  len=ChiperText.Length();
  int len_Key=keytext.Length();
  for(int i=1,j=1;i<=len ;i++)
  {
      temp1=ChiperText[i];
      if(temp1!=' '&&temp1<65||temp1>90&&temp1<97||temp1>122)
          {ShowMessage("请正确输入明文(只能输入字母和空格)");return;}
      if(keytext[j]<65||keytext[j]>90&&keytext[j]<97||keytext[j]>122)
          {ShowMessage("密钥中不能含有字母以外的字符,请重新输入");return;}

      if(keytext[j]>=97&&keytext[j]<=122)
           temp2=temp1-(keytext[j]-97);
      else if(keytext[j]>=65&&keytext[j]<=90)
          temp2=temp1-(keytext[j]-65);
      //判断字符区间
      if(ChiperText[i]!=' ')
      {

          if(temp1<=90&&temp1>=65&&temp2>=65||temp1<=122&&temp1>=97&&temp2>=97)
              ChiperText[i]=temp2;
          else
              ChiperText[i]=temp2+26;
          if(j+1>len_Key) j=1;
          else j++ ;
      }
  }
  real_Result3->Text=ChiperText;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::anti_VigenereChiperClick(TObject *Sender)
{
  secret_score3->Text=sec_Result3->Text;
  antikey3->Text=key3->Text;
  antiVigenere_ChiperClick(Sender);
  if(real_score3->Text==real_Result3->Text)
  ShowMessage("加密与解密过程正确");
  else ShowMessage("加密与解密过程有错");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Permutation_ChiperClick(TObject *Sender)
{  if(e_Plain->Text.IsEmpty()!=true&&e_Key->Text.IsEmpty()!=true)
  {
  AnsiString s1=e_Plain->Text;        //明文
  char* ch1=s1.c_str();
  AnsiString s2=e_Key->Text;        //密钥
  char* ch2=s2.c_str();
  int n[1000]={0},count=0;
  char ch[1000];
  AnsiString stemp;
  for(int i=0;i<s2.Length();i++)       //把密钥翻译为int的数组
  {
    if(ch2[i]!=',')
    {
      stemp+=AnsiString(ch2[i]);
    }
    else
         {
          n[count++]=StrToInt(stemp);
          stemp="";
         }
  }
  if(s1.Length()%count!=0)
     {
       ShowMessage("您输入的密钥长度与明文不匹配!");
       e_Key->Text="";
     }
  else {
  stemp="";
  for(int i=0;i<s1.Length();i=i+count)        
   {
     for(int j=i;j<i+count;j++)
      {
       ch[j]=ch1[i+n[j-i]-1];

      }
   }
   ch[s1.Length()]='\0';
   for(int i=0;i<s1.Length();i++)
     stemp+=AnsiString(ch[i]);
    sec_Result4->Text=stemp;
     }
  }
  else if(e_Plain->Text.IsEmpty()==true) ShowMessage("请输入明文!");
  else  if(e_Key->Text.IsEmpty()==true) ShowMessage("请输入密钥!");
}

//---------------------------------------------------------------------------


void __fastcall TForm1::antiPermutation_ChiperClick(TObject *Sender)
{
  if(anti_Key->Text.IsEmpty()!=true&&e_Clipher->Text.IsEmpty()!=true)
  {
    AnsiString s1=anti_Key->Text;
    char* ch1=s1.c_str();
    AnsiString s2=e_Clipher->Text;
    char* ch2=s2.c_str();
    int n1[1000]={0},count=0,n2[1000]={0};
    char ch[1000];
    AnsiString stemp;
    for(int i=0;i<s1.Length();i++)       //把密钥翻译为int的数组n1
    {
       if(ch1[i]!=',')
          stemp+=AnsiString(ch1[i]);
       else
       {
          n1[count++]=StrToInt(stemp);
          stemp="";
       }
    }
    if(s1.Length()%count!=0)
    {
       ShowMessage("您输入的密钥长度与明文不匹配!");
       anti_Key->Text="";
    }
    else
    {
       for(int i=0;i<count;i++)            //翻译出n1的逆数组n2
       {
          for(int j=0;j<count;j++)
          {
             if(n1[i]-1==j)  n2[j]=i;
          }
       }
       stemp=" ";
       for(int i=0;i<s1.Length();i=i+count)           //解密
       {
          for(int j=i;j<i+count;j++)
          {
             ch[j]=ch2[i+n2[j-i]];
           }
       }
       for(int i=0;i<s1.Length();i++)
       stemp+=AnsiString(ch[i]);
       real_Result4->Text=stemp.Trim();
    }
  }
  else  ShowMessage("密钥明文未输入完全,请检查。");
  
}
//---------------------------------------------------------------------------


void __fastcall TForm1::anti_PermutationChiperClick(TObject *Sender)
{
  e_Clipher->Text=sec_Result4->Text;
  anti_Key->Text=e_Key->Text;
  antiPermutation_ChiperClick(Sender);
  if(real_Result4->Text==e_Plain->Text) ShowMessage("加密解密过程正确");
  else  ShowMessage("加密解密过程错误");
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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