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

📄 qqy.cpp

📁 这是关于用扩展欧几里德算法求乘法逆元然后用仿射密码加密解密的两个算法/
💻 CPP
字号:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>
void main()
{
	void jiami();
	void jiemi();
	jiami();
	jiemi();		
}

void jiami()
{
	
		char p[100];
		int length1;
		int gcd(int ,int);
		void swap();
		int k1,k2;
		int i;
		printf("请输入要加密的字符串:\n");
		scanf("%s",&p);
		length1 = strlen(p);
		for(i=0;i<3;i++)
		{
			printf("请输入加密密钥:");
			scanf("%d %d",&k1,&k2);
			int re2=gcd(k1,26);
			if (re2==1)
			{
				for( i=0;i<length1;i++)
				{
					if(p[i]>96&&p[i]<123)
						p[i]=(k1*(p[i]-97)+k2)%26+65;
					else if(p[i]>64&&p[i]<91)
						p[i]=(k1*(p[i]-65)+k2)%26+65;
				}
				printf("加密结果为:%s\n",p);break;
			}
			else printf("输入的密钥出错!\n");
		}
		
	
	
	 
		
}
void jiemi()
{
		char q[50];
		int length2;
		int gcd(int,int);
		void swap();
		int Euclid(int,int);
		int k1,k2,t,i;
	
		printf("请输入需要解密的字符串:\n");
	    scanf("%s",&q);
		length2=strlen(q);
		for(i=0;i<3;i++)
		{
			printf("请输入解密密钥:");
			scanf("%d %d",&k1,&k2);
			int result=Euclid(k1,k2);
			int re2=gcd(k1,26);
			if(re2==1)
			{
				for(i=0;i<length2;i++)
				{
					if(q[i]>64&&q[i]<91)
					{
						t=result*((q[i]-65)-k2);
						if(t<0)
							q[i]=t%26+26+97;
						else 
							q[i]=t%26+97;
					}		
				}
				printf("输出解密结果为:%s\n",q);break;
			}
			else printf("输入的密钥出错!\n");
		}
}
int Euclid (int d,int f)
{
	int x[3]={1,0,f};
	int y[3]={0,1,d};
	int temp[3];
	int q;
	while (1)
	{
		if (y[2]==0)
		{
			return -1;
			break;
		}
		if (y[2]==1)
		{
			if (y[1]>=0)
			{return y[1]%f;break;}
			else 
			{return y[1]%f+f;break;}
		}
		q=x[2]/y[2];
		temp[0]=x[0]-q*y[0];
		temp[1]=x[1]-q*y[1];
		temp[2]=x[2]-q*y[2];
		x[0]=y[0];
		x[1]=y[1];
		x[2]=y[2];
		y[0]=temp[0];
		y[1]=temp[1];
		y[2]=temp[2];

	}


}  
void swap(int a,int b)
{
	int c=a;
	a=b;
	b=c;
}

int gcd(int a,int b)
{
	if(0==a) return b;
	if(0==b) return a;
	if(a>b) swap(a,b);
	int c;
	for(c=a%b;c>0;c=a%b)
	{
		a=b;
		b=c;
	}
	return b;
}

⌨️ 快捷键说明

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