📄 traditionalcode.cpp
字号:
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
int main()
{
int start;
cout<<"请选择加密算法:"<<endl;
cout<<"1 单表代换密码算法"<<endl;
cout<<"2 移位密码算法"<<endl;
cout<<"3 Vigenere 密码算法"<<endl;
cin>>start;
if(start==1)
{ int define;char str1[100],sinput[1000],soutput[1000],ch;int i=0,length1,length2,en[27]={0},value,de[27]={0},count=1;//注意下count到底初值是用0还是1
cout<<"您现在使用的是单表代换密码算法"<<endl;
cout<<"1 加密 "<<endl;
cout<<"2 解密 "<<endl;
cin>>define;
ifstream infile1("key.txt"); //读取密钥
while(infile1.get(ch)) //读取明文
{
str1[i]=ch;
i++;
}
length1=i;
for(i=0;i<length1;i++)
{
if(str1[i]>64 && str1[i]<91) //将大写转换成小写
str1[i]+=32;
if(str1[i]>96 && str1[i]<123)
{
value=str1[i]-96;
if(en[value]==0)
{
en[value]=count++; //建立加密代换表
}
}
}
for(i=1;i<27;i++)
if(en[i]==0) {en[i]=count++;} //建立加密代换表(在密钥文件中未出现的字符进行一个顺序排序)
for(i=1;i<27;i++)
{
value=en[i];
de[value]=i; //建立解密代换表
}
infile1.close();
if(define==1)
{
ifstream infile2("plaintext.txt"); //加密时,先读取明文
i=0;
while(infile2.get(ch))
{
sinput[i]=ch;
i++;
}
length2=i;
for(i=0;i<length2;i++)
{
if(sinput[i]>64 && sinput[i]<91)
sinput[i]+=32;
if(sinput[i]>96 && sinput[i]<123)
{
soutput[i]=en[(int)(sinput[i]-96)]+96; //解密
}
else soutput[i]=sinput[i];
}
infile2.close();
ofstream out("ciphertext.txt"); //输出密文
for(i=0;i<length2;i++)
{
out<<soutput[i];
}
out.close();
}
/* 进行解密*/
else if(define==2)
{
/* 取密文 */
ifstream din2("ciphertext.txt");
i=0;
while(din2.get(ch))
{
if(ch>64 && ch<91)
ch+=32;
sinput[i++]=ch;
}
length2=i;
din2.close();
ofstream dout2("plaintext.txt");
for(i=0;i<length2;i++)
{
if(sinput[i]>'a' && sinput[i]<'z')
{
soutput[i]=de[(int) (sinput[i]-96)]+96; //解密
}
else soutput[i]=sinput[i];
dout2<<soutput[i];
}
}
}
else if(start==2)
{
int define;
int k,length1,i=0;
char input[1000];
char output[1000];
char ch,out;
cout<<"您现在使用的是移位密码算法:"<<endl;
cout<<"1 加密 "<<endl;
cout<<"2 解密 "<<endl;
cin>>define;
/* 进行加密 */
ifstream infile1("key.txt"); //读取密钥
infile1>>k;
infile1.close();
if(define==1)
{
ifstream infile2("plaintext.txt"); //读取明文
while(infile2.get(ch))
{
input[i]=ch;
i++;
}
infile2.close();
length1=i;
for(i=0;i<length1;i++)
{
if(input[i]>'a'-1 && input[i]<'z'+1)
{
output[i]= ((int)(input[i]-97)+k)%26+97; //加密过程
}
else if(input[i]>'A'-1 && input[i]<'Z'+1)
{
output[i]= ((int)(input[i]-65)+k)%26+65;
}
else output[i]=input[i];
}
ofstream out("ciphertext.txt");
for(i=0;i<length1;i++)
out<<output[i];
out.close();
}
/* 进行解密 */
else if(define==2)
{
ifstream din2("ciphertext.txt");
ofstream dout2("plaintext.txt");
while(din2.get(ch))
{
if(ch>'a'-1 && ch<'z'+1)
{
out= ((int)(ch-97)-k+26)%26+97;
}
else if(ch>'A'-1 && ch<'Z'+1)
{
out= ((int)(ch-65)-k+26)%26+65;
}
else out=ch;
dout2<<out;
}
din2.close();
dout2.close();
}
}
else if(start==3)
{
int i=0,length1,length2,j,define;
char ch,c;int key[10];
char input[1000];
char output[1000];
cout<<"您使用的是Vigenere 密码算法"<<endl;
cout<<"1 加密 "<<endl;
cout<<"2 解密 "<<endl;
cin>>define;
ifstream infile1("key.txt");
while(infile1.get(ch))
{
if(ch>='A' && ch<='Z')
ch+=32;
if(ch>='a' && ch<='z')
key[i]=(int)(ch-97);
i++;
}
length1=i;
infile1.close();
if(define==1)
{
ifstream infile2("plaintext.txt");
i=0;
while(infile2.get(ch))
{
if(ch>='A' && ch<='Z')
ch+=32;
input[i]=ch;
i++;
}
length2=i;
infile2.close();
ofstream out("ciphertext.txt");
for(i=0,j=0;i%=length1,j<length2;j++) //实现一个分组后的加密过程
{
if(input[j]>='a' && input[j]<='z')
{
c=(input[j]-97+key[i++])%26+97;
out<<c;
}
else out<<input[j];
}
}
else if(define==2)
{
i=0;
ifstream din2("ciphertext.txt");
ofstream dout2("plaintext.txt");
while(din2.get(ch))
{
if(ch>='A' && ch<='Z')
ch+=32;
output[i]=ch;i++;
}
length2=i;
for(i=0,j=0;i%=length1,j<length2;j++)
{
if(output[j]>='a' && ch<='z')
{
c=(output[j]-97+26-key[i++])%26+97;
dout2<<c;
}
else dout2<<output[j];
}
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -