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

📄 playfair.cpp

📁 一个好的DES程序.可能程序不是很完整,希望大家多多指教
💻 CPP
字号:
#include<stdio.h>
#include<string.h>
struct coordinate
{
	int x;
	int y;
};
char ming[100000],mi[100000];
char a[5][6]={{'c','i','p','h','e'},{'r','a','b','d','f'},{'g','k','l','m','n'},
	{'o','q','s','t','u'},{'v','w','x','y','z'}};
void encode()
{
	int len,i,j,k,flag;
	coordinate t1,t2,t3,t4;
	len=strlen(ming);
		for(i=0;i<len;)
		{
			if(ming[i]<65){mi[i]=ming[i];i++;continue;}
			flag=0;
			for(j=0;j<5;j++)
				for(k=0;k<5;k++)
				{
					if(flag==2)goto loop;
					if(a[j][k]==ming[i])
					{
						t1.x=j;
						t1.y=k;
						flag++;
					}
					else if(a[j][k]==ming[i+1])
					{
						t2.x=j;
						t2.y=k;
						flag++;
					}
				}
loop:;
	 if(t1.x==t2.x)
	 {
		 t3.y=(t1.y+1)%5;
		 t4.y=(t2.y+1)%5;
		 t3.x=t2.x;
		 t4.x=t2.x;
	 }
	 else if(t1.y==t2.y)
	 {
		 t3.x=(t1.x+1)%5;
		 t4.x=(t2.x+1)%5;
		 t3.y=t2.y;
		 t4.y=t2.y;
	 }
	 else 
	 {
		 t4.x=t1.x;
		 t4.y=t2.y;
		 t3.x=t2.x;
		 t3.y=t1.y;
	 }
	 mi[i]=a[t3.x][t3.y];
	 mi[i+1]=a[t4.x][t4.y];
	 i+=2;
		}//for
     printf("%s\n",mi);		
}
void decode()
{
	int len,i,j,k,flag;
	coordinate t1,t2,t3,t4;
	 len=strlen(mi);
		for(i=0;i<len;)
		{
			if(mi[i]<65){ming[i]=mi[i];i++;continue;}
			flag=0;
			for(j=0;j<5;j++)
				for(k=0;k<5;k++)
				{
					if(flag==2)goto loop;
					if(a[j][k]==mi[i])
					{
						t1.x=j;
						t1.y=k;
						flag++;
					}
					else if(a[j][k]==mi[i+1])
					{
						t2.x=j;
						t2.y=k;
						flag++;
					}
				}
loop:;
	 if(t1.x==t2.x)
	 {
		 t3.y=(t1.y-1+5)%5;
		 t4.y=(t2.y-1+5)%5;
		 t3.x=t2.x;
		 t4.x=t2.x;
	 }
	 else if(t1.y==t2.y)
	 {
		 t3.x=(t1.x-1+5)%5;
		 t4.x=(t2.x-1+5)%5;
		 t3.y=t2.y;
		 t4.y=t2.y;
	 }
	 else 
	 {
		 t4.x=t1.x;
		 t4.y=t2.y;
		 t3.x=t2.x;
		 t3.y=t1.y;
	 }
	 ming[i]=a[t3.x][t3.y];
	 ming[i+1]=a[t4.x][t4.y];
	 i+=2;
		}//for
	 printf("%s\n",ming);
}
 main()
{
	//coordinate t1,t2,t3,t4;
	int n,i,j,k,len,flag,pp;
	for(i=0;i<5;i++)printf("%s\n",a[i]);
	while(1)
	{
	    printf("欢迎您进入本系统!本系统具有的功能为加密和解密!\n");
	    printf("选择1:加密;\n");
	    printf("选择2:解密;\n");
	    printf("选择0:退出系统;\n");
        printf("请您选择!\n");
        memset(ming,0,100000);
        memset(mi,0,100000);
        scanf("%d",&pp);
        if(pp==0)break;
        else if(pp==1)
        {
            printf("请输入明文\n");
		    scanf("%s",ming);
		    encode();
        }
        else if(pp==2)
        {
            printf("请输入密文\n");
            scanf("%s",mi);
            decode();
        }
        else printf("选择有误,请重新认真选择!\n");
	
	}//while
}

⌨️ 快捷键说明

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