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

📄 verify.c

📁 RSA数据加密代码
💻 C
字号:



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
void perr(char *);
unsigned long encode();
int cmp();
int *sub();
int *tz();
unsigned long mu();
int *mn();
int *chu();
int *multi();
char filename[100];
char newfile[100];
char pkfile[100];
FILE *fp;
FILE *nfp;
FILE *kfp;
char n[20];
char k[20];

main(argc,argv)
int argc; char **argv;
{ char block[20];
unsigned long x=0;
 long num=0,p,i=0;
 char ch;
 int r;
 
 if(argc>3||argc==2) perr("Usage: verify [filename] [skfile]");
 if(argc==3) {strcpy(filename,argv[1]);strcpy(pkfile,argv[2]);}
 else
 {
 printf("\nEnter filename needing verifying:  "); gets(filename);
 printf("\nEnter your pkfile: ");gets(pkfile);
 }
 if((fp=fopen(filename,"r"))==NULL) perr("Can't open file!");
 strcpy(newfile,filename);
 while(newfile[i]!='\0')
 {i=i+1;}
 ch=fgetc(fp);
 newfile[i-1]=ch;
 if((kfp=fopen(pkfile,"r"))==NULL) perr("Can't open file!");
 if((nfp=fopen(newfile,"w+"))==NULL) perr("Can't creat new file!");
 
  fscanf(kfp,"%s %s",n,k);
  printf("\nn=%s,k=%s\n",n,k);
 fclose(kfp);
 fscanf(fp,"%u;",&num);
 printf("num=%u",num);
 fgetc(fp);
 r=num%3;
 p=(num-r)/3;
 i=0;
 while(i<p)
 {i=i+1;

 fread(block,20,1,fp);
 block[20]='\0';
printf("block=%s",block);

 x=encode(block);
 fwrite(&x,3,1,nfp);
 }
 if (r!=0)
 {
  fread(block,20,1,fp);
  block[20]='\0';
 
 x=encode(block);
  fwrite(&x,r,1,nfp);
  r=0;
  }
  fclose(fp);
  fclose(nfp);
  }

void perr(s)
char *s;
{
printf("\n%s",s); exit(1);
}

unsigned long encode(char blo[20])
{int i;
int b[40];
static int u[40];
 int a[40];
 int c[40];
unsigned long x=0;
 for(i=0;i<20;i++)
 { a[i]=blo[i]-48;
 b[i]=k[i]-48;}
 for(i=20;i<40;i++){a[i]=0;b[i]=0;}
for(i=0;i<40;i++)c[i]=0;c[0]=1;
 while(cmp(b,u))
 { 
	 while ((b[0]%2)==0)
	 {
	 chu(b,2);
     mn(a,a);
	 }
  b[0]--;
  mn(c,a);
 }
 printf("x=");
 for(i=19;i>=0;i--)
	{ x=x*10+c[i];printf("%d",c[i]);}
return (x);
}


int *mn(int c[40],int a[40])
{int i;
unsigned long d=0;
 int m[40];
 int x[40],y[40];
for(i=0;i<20;i++)
{x[i]=n[i]-48;
y[i]=n[i]-48;
}
x[10]++;
for(i=20;i<40;i++){x[i]=0;y[i]=0;}
	for(i=17;i>=10;i--){d=x[i]+d*10;}
	
	multi(c,a);

		while(cmp(c,x)){
		for(i=10;i<40;i++)m[i-10]=c[i];
		for(i=30;i<40;i++)m[i]=0;
		chu(m,d);
multi(m,y);

sub(c,m);

	}
while(cmp(c,y))
{sub(c,y);
return(c);}
}

int *multi(int n2[40],int n1[40])    /*乘法++*/
{int i;
	
int mul[40];

	int a,b;
	for(i=0;i<40;i++)mul[i]=0;
	for(a=0;a<20;a++)
	{
		for(b=0;b<20;b++)
		{
			mul[a+b]=mul[a+b]+n2[b]*n1[a];
		}
	}
	tz(mul);
	for(a=0;a<40;a++)
	{n2[a]=mul[a];}
return(n2);}

int *tz(int *mut)        /*调整数组++*/   
{
	int a,b,bi,i;

	for(a=0;a<40;a++)
	{
		i=0;
		b=mut[a];
		mut[a]=mut[a]%10;
		while(b)
		{
			i++;
			b=b/10;
			bi=b%10;
			mut[a+i]+=bi;
		}
	}return(mut);
	
}
int cmp(int *n1,int *m)                           /*比较 */
{

	int i=39;

	while(n1[i]==m[i])
	{
		i--;
	}
	if(i<0)return 0;
else	if(n1[i]>m[i])
	return 1 ;
	else 
return 0 ;
}
		
int *chu(int *m,unsigned long d )  /*除法*/
{unsigned long w1=0;
int i,a;
 int u[40];for(i=0;i<40;i++)
	 u[i]=0;
	for(a=29;a>=0;a--)
{w1=w1*10+m[a];
u[a]=w1/d;
w1=w1%d;
	}
	for(a=29;a>=0;a--)
		m[a]=u[a];
	return(m);
	
}
		 int *sub(int c[40],int q[40])   /*减法++*/
 {
 int i,t;
 for(i=0;i<40;i=i++)
 {if(c[i]>=q[i])
 c[i]=c[i]-q[i];
 else
 {
	 c[i]=c[i]+10-q[i];
	 t=1;
 while(c[i+t]==0){
		 c[i+t]=9; t++;}
 c[i+t]--;}
	 
 }
 
		return(c); }

 

⌨️ 快捷键说明

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