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

📄 playfair.cpp

📁 playfair加密算法(C++实现)包含源代码及可执行文件
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUM 1000

int main()
{
	int i,j,k=0,m,n,temp=0,length;
	char key[NUM],voa[26];
	char table[5][5];
	char word[NUM];
	//printf("%d",'z');
	printf("密钥: ");
	scanf("%s",key);
	length=strlen(key);
    for(i=0;i<length;i++)
	{
		if(key[i]=='j')
			key[i]='i';
	}


    for(i=0;i<length;i++) 
	{
	for(j=i+1;j<length;j++) 
		if(key[i]==key[j]) 
		{
			for(int t=j;t<length;t++) 
			{
				key[t]=key[t+1]; 
			}
			j--;
			length--; 
		} 
		if(j==1) 
		{
			key[j]=0;
			break;
		} 
	} 
   // printf("%d\n",length);
	for(i=0;i<26;i++)
	{
		voa[i]=65+i;
	}
	for(i=0;i<length;i++)
	{
		key[i]=key[i]-32;
	}

	char p;
	int count=0;
	for(i=0;i<26;i++)
	{
        p=voa[i];
		for(j=0;j<length;j++)
		{
			if(p==key[j])
			{
				key[i+length]=p;
				count+=1;
				break;
			}
			//printf("%d",count);
		}
		if(j==length)
		{
			key[i+length-count]=p;
		}
		
	}
	int u=0;
	for(i=0;i<26;i++)
	{
		if(key[i]=='J')
		{
			
			for(u=i;u<26;u++)
			{
				key[u]=key[u+1];
			}
		}
		if(key[i]=='I')
			key[i]='*';

		//printf("%c",word[i]);

	}
	temp=0;
	for(i=0;i<5;i++)
	{
		for(j=0;j<5;j++)
		{
			table[i][j]=key[j+temp];
			printf("%c ",table[i][j]);
			if(j==4)
			{
				temp+=5;
			    printf("\n");
			}
		}
	}
	printf("明文: ");
	scanf("%s",word);
	length=strlen(word);
	//printf("%d\n",length);

	int counter=0;
	for(i=0;i<length;)
	{
		if(word[i]==word[i+1])
		{
			i+=1;
			counter+=1;
		}
		else
			i+=2;

	}

	//printf("1:%d\n",length+counter);
	for(i=0;i<length+counter;i+=2)
	{
		if(word[i]==word[i+1])
		{
		
			for(j=length+counter-1;j>i+1;j--)
			{
				word[j]=word[j-1];
				
			}
			word[i+1]='x';
		}
	}


	length=length+counter;

	if(length%2!=0)
	{
		word[length]='x';
		length+=1;
	}

	for(k=0;k<length;k++)
	{
	   word[k]=word[k]-32;

	}
	for(i=0;i<length;i++)
	{
		if(word[i]=='I'||word[i]=='J')
		{
			word[i]='*';
		}
	}
	count=0,k=0;
	
     
loop: for(i=0;i<5,k<length;i++)
	   {
		  //k=k-2;
		  for(j=0;j<5;j++)
		  {
			 for(m=0;m<5;m++)
			 {
				 for(n=0;n<5;n++)
				 {
					    if((table[i][j]==word[k])&&(table[m][n]==word[k+1])&&(i==m))
						{
							count=1;
							
							word[k]=table[i][j+1];
							word[k+1]=table[m][n+1];
							if(j==4)
							{
								word[k]=table[i][0];
								//break;
							}
							if(n==4)
							{
								word[k+1]=table[m][0];
								//break;
							}
							//printf("1:%c %c %d",word[0],word[1],k);
							//break;
							//Sleep(1000);
							k+=2;
					     	if(count==1)
							{
							  goto loop;
							}
						}
						else if((table[i][j]==word[k])&&(table[m][n]==word[k+1])&&(j==n))
						{
							count=1;
							word[k]=table[i+1][j];
							word[k+1]=table[m+1][n];
							if(i==4)
							{
								word[k]=table[0][j];
								//break;
							}
							if(m==4)
							{
								word[k+1]=table[0][n];
								//break;
							}
							//printf("2:%c %c",word[0],word[1]);
							k+=2;
							if(count==1)
							{
							  goto loop;
							}
						}
						else if((table[i][j]==word[k])&&(table[m][n]==word[k+1])&&(i!=m)&&(j!=n))
						{
							count=1;
							word[k]=table[i][n];
							word[k+1]=table[m][j];
							//printf("3:%c %c",word[0],word[1]);
							k+=2;
							if(count==1)
							{
							  goto loop;
							}
						}
						
						
					}
				}
			}
		}
     printf("密文: ");
	for(k=0;k<length;k++)
	{
	   printf("%c ",word[k]);
	}
	printf("\n");
    system("pause");
	return 0;
}

⌨️ 快捷键说明

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