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

📄 专业实习(解密).cpp

📁 这是一个简单的解密程序。利用置换算法进行五轮迭代
💻 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 + -