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

📄 elgamal.c

📁 Implementation Of ELGAMAL Public key encryption in C . it can use very long key os size 2007 decimal
💻 C
字号:
#include<stdio.h>#include"lip.h"#include<time.h>/*public key=(p,g,k);    private key=(p,g,a);*/long nbtest=120;void xrand(verylong seed,verylong *b){	verylong temp=0;	zintoz((long)69069,b);	verylong c=0;	zintoz((long)5,&c);	zintoz((long)10,&temp);	verylong min=0;	verylong max=0;	int i;	i=1;	zsexp(temp,(long)207,&min);//	zwriteln(min);	zsexp(temp,(long)208,&max);	zone(&temp);//	zwriteln(temp);	zsub(max,temp,&max);//	zwriteln(max);	while(i==1){	zmul(*b,seed,&temp);	zadd(temp,c,b);	i=zcompare(min,*b);	}	i=zcompare(max,*b);	do{		zsdiv(*b,(long)10,b);		i=zcompare(max,*b);	}while(i!=1);	i=z2mod(*b);		if(i==0){			zsadd(*b,1,b);	}/*	printf("Seed: ");	zwriteln(seed);*/	return ;}void xfindprime(verylong *b){	long i=0;	verylong add2=0;	zintoz((long)2,&add2);	while(i==0){		zadd(add2,*b,b);		i=zprobprime(*b,nbtest);	}	return ;}void encryptMesg(verylong p,verylong g,verylong k, verylong mesg,verylong *gamma,verylong *delta){	verylong e=0;	verylong seed=0;	verylong temp=0;	zintoz(12345,&seed);	time_t start;/*	printf("\nEncrypting message : \n\tEnter seed : ");	zread(&seed);*/	time(&start);	long t=0;	t=(long)start;	printf("\nencrypting seed %lu : ",t);	zintoz(t,&seed);	zrstart(seed);	zrandomprime(50,nbtest,&e,zrandomb);	printf("\ne: ");	zwriteln(e);	zexpmod(g,e,p,gamma);	zexpmod(k,e,p,&temp);	zmulmod(temp,mesg,p,delta);}void decryptMesg(verylong p,verylong g,verylong a,verylong gamma,verylong delta,verylong *text){	verylong temp=0;	verylong one=0;	verylong interm=0;	zone(&one);	zsub(p,a,&temp);	zsub(temp,one,&temp);	zexpmod(gamma,temp,p,&interm);	zmulmod(interm,delta,p,text);}int main(){    	verylong seed=0;	verylong random=0;	verylong prime=0;	verylong g=0;	verylong a=0;	verylong k=0;	verylong mesg=0;	verylong gamma=0;	verylong delta=0;	verylong text=0;	time_t start,end;	/*generator , g=2; */	zintoz(2,&g);	time(&start);	long t=0;	t=(long)start;	printf("\nseed for generating P : %lu ",t);	zintoz(t,&seed);	/*Find Random Number*/	xrand(seed,&random);	zsadd(random,0,&prime);	printf("\nRandom Number : ");	zwriteln(random);	/*Find prime Number*/	xfindprime(&prime);	printf("Prime Number(p): ");	zwriteln(prime);	time(&end);	t=(start-end)*132;	printf("\nseed for generating g : %lu \n ",t);	zintoz(t,&seed);	zrstart(seed);	zrandomprime(50,nbtest,&g,zrandomb);	printf("(generator)g: ");	zwriteln(g);	/*Find a*/	time(&end);	t=(start*end)/10000;	printf("\nseed for generating a : %lu \n ",t);	zintoz(t,&seed);	zrstart(seed);	zrandomprime(50,nbtest,&a,zrandomb);	printf("a: ");	zwriteln(a);	/*Find K*/	zexpmod(g,a,prime,&k);	printf("k: ");	zwriteln(k);	/*Input message*//*	printf("\nEnter Number :  ");	zread(&mesg);	printf("\nU have entered :  ");	zwrite(mesg);	encryptMesg(prime,g,k,mesg,&gamma,&delta);	printf("\n\tgamma    :  ");	zwrite(gamma);	printf("\n\tdelta    :  ");	zwrite(delta);	decryptMesg(prime,g,a,gamma,delta,&text);	printf("\n\tPlaintext   : ");	zwrite(text);	printf("\n\n");*/	int select=0;	while(1){		printf("\nEnter ur choice : ");		printf("\n1.Encrypt and decrypt both (1) : ");		printf("\n2.Encrypt only (2) : ");		printf("\n3.Decrypt only (3) : ");		printf("\n4.exit(4)	     : ");		scanf("%d",&select);		switch(select){			case 1:				printf("\nEnter Number :  ");				zread(&mesg);				printf("\nU have entered :  ");				zwrite(mesg);				encryptMesg(prime,g,k,mesg,&gamma,&delta);				printf("\n\tgamma    :  ");				zwrite(gamma);				printf("\n\tdelta    :  ");				zwrite(delta);				decryptMesg(prime,g,a,gamma,delta,&text);				printf("\n\tPlaintext   : ");				zwrite(text);				printf("\n\n");				break;			case 2 :				printf("\nEnter Number :  ");				zread(&mesg);				printf("\nU have entered :  ");				zwrite(mesg);				encryptMesg(prime,g,k,mesg,&gamma,&delta);				printf("\n\tgamma    :  ");				zwrite(gamma);				printf("\n\tdelta    :  ");				zwrite(delta);				printf("\n\n");				break;			case 3:				printf("Enter gamma : ");				zread(&gamma);				printf("Enter delta : ");				zread(&delta);				decryptMesg(prime,g,a,gamma,delta,&text);				printf("\n\tPlaintext   : ");				zwrite(text);				printf("\n\n");				break;			case 4:				printf("\n\n");				return 0;			default:				printf("Please enter correct option.");		}	}			return 0;}

⌨️ 快捷键说明

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