📄 unit1.~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 + -