📄 专业实习(解密).cpp
字号:
// 赵小川.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdio.h"
int i,j=0,sum=0,p1[17]={0},p2[17],p3[17],p4[17],p5[17];
char cr,o,file[1000],change[17];
int count=0,ch=0;
char string[20];
int c[17]={0},d[17]={0};
void array() //对参考标准数组p1从小到大排序,对应数组c也要调整
{
int t=0,flag=0,m=0,ch=0;
for(i=0;i<=15;i++)
{
m=d[i];
ch=c[i];
for(j=i+1;j<=15;j++)
if(d[j]<m)
{
m=d[j];
ch=c[j];
t=j;
flag=1;
}
if(flag==1)
{
d[t]=d[i];
c[t]=c[i];
d[i]=m;
c[i]=ch;
flag=0;
}
}
}
void jiemi()
{
for(i=0;i<=15;i++)
{
c[i]=i;
d[i]=p1[i];
}
array();
}
void secretcode()
{
int t=0;
printf("\n\n置换密码为:\n");
t=p1[15];
for(i=15;i>=1;i--)
{
j=(p1[i-1]+p1[i])%i;
sum=p1[15-i+1];
p1[15-i+1]=p1[j];
p1[j]=sum;
}
p1[0]=t;
jiemi();
for(i=0;i<=15;i++)
printf("%d ",c[i]);
printf("\n");
cr=getchar();
}
void save() //保存文件
{
FILE *fp;
printf("\n\n请输入要保存的文件名:\n");
scanf("%s",string);
if((fp=fopen(string,"wb"))==NULL)
{
printf("can not open the file!\n");
return;
}
for(i=0;i<=count;i++)
if(file[i]!='#')
if(fwrite(&file[i],sizeof(char),1,fp)!=1) //写入文件
printf("file write error!\n");
fclose(fp); //关闭文件
printf("\n\t\t保存成功,请按 y 继续\n");
o='\0';
while(o!='y') scanf("%c",&o);
cr=getchar();
}
void open() //打开文件
{
FILE *fp;
printf("\n\n请输入要打开的文件名:\n");
scanf("%s",string);
if((fp=fopen(string,"rb"))==NULL)
{
printf("can not open the file!\n");
return;
}
i=0;
while(feof(fp)==0)
{
fread(&file[i],sizeof(char),1,fp);
printf("%c",file[i]);
i++;
}
count=i-1;
fclose(fp); //关闭文件
printf("\n\t\t文件打开成功,请按 y 继续\n");
o='\0';
while(o!='y') scanf("%c",&o);
cr=getchar();
}
void copy(int n)
{
n=n*16;
for(j=0;j<=15;j++)
change[j]=file[n+j];
}
void one(int n)
{
n=n*16;
for(j=0;j<=15;j++)
{
ch=p1[j];
file[n+j]=change[ch];
}
}
void two(int n)
{
n=n*16;
for(j=0;j<=15;j++)
{
ch=p2[j];
file[n+j]=change[ch];
}
}
void three(int n)
{
n=n*16;
for(j=0;j<=15;j++)
{
ch=p3[j];
file[n+j]=change[ch];
}
}
void four(int n)
{
n=n*16;
for(j=0;j<=15;j++)
{
ch=p4[j];
file[n+j]=change[ch];
}
}
void five(int n)
{
n=n*16;
for(j=0;j<=15;j++)
{
ch=p5[j];
file[n+j]=change[ch];
}
}
void main(int argc, char* argv[])
{
for(i=0;i<=15;i++)
p1[i]=i;
printf("\n原始自然排列为:\n");
for(i=0;i<=15;i++)
printf("%d ",p1[i]);
printf("\n");
secretcode();
for(i=0;i<=15;i++)
p2[i]=c[i];
secretcode();
for(i=0;i<=15;i++)
p3[i]=c[i];
secretcode();
for(i=0;i<=15;i++)
p4[i]=c[i];
secretcode();
for(i=0;i<=15;i++)
p5[i]=c[i];
secretcode(); //生成5组置换密码
for(i=0;i<=15;i++)
p1[i]=c[i];
open();
i=0;
j=0;
int flag=0,v,zz;
zz=int(count)/16;
v=(count%16);
for(i=0;i<zz;i++)
{
copy(i);
if(i%5==0)
{
one(i);
flag=1;
}
if(i%5==1)
{
two(i);
flag=2;
}
if(i%5==2)
{
three(i);
flag=3;
}
if(i%5==3)
{
four(i);
flag=4;
}
if(i%5==4)
{
five(i);
flag=5;
}
}
if(v!=0)
{
copy(i);
if(flag==1) one(i);
if(flag==2) two(i);
if(flag==3) three(i);
if(flag==4) four(i);
if(flag==5) five(i);
}
save();
for(i=0;i<=count;i++)
if(file[i]!='#')
printf("%c",file[i]);
cr=getchar();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -