先给你第一个,声明:版权不轨我所有。
RSA加密实例分析
(源代码) 至于RSA的理论网上一大把,它是基于公钥加密体制的一种算法。这个实例主要是用来将某一重要文件绑定到一个IP地址上。
把它拷贝下来,存为CODE.C,然后执行 GCC –O CODE CODE.C 然后用./ CODE E [IP ADDRESS] [FILENAME]对文件进行加密。或用 ./CODE D [IP ADDRESS] 进行解密整个过程中产生了两个中间文件,至于什么文件,你去试一试就知道啦! #include "stdio.h" #include "string.h" int e,d=1,n; main(int argc,char *argv[]) { int ip,fai,p=43,q=59,ch1,i=0,j=0,edch,dech=0; char *num,*cha,ch,*file={"index.html"}; FILE *fp,*fp2; if (argc<2) { printf("paramater error!"); exit(0); } if (argc>3) { file=argv[3]; } //printf("%s,",file) e=iptoint(argv[2]); //printf("%s,%s",argv[1],argv[2]); switch (*argv[1]) { case 'e': //printf("e=%d",e); if ((fp2=fopen("encode.htm","w+"))==NULL) { printf("can't open file"); exit(0); } "code.c" 199L, 3571C } n=p*q;fai=(p-1)*(q-1); if((fp=fopen(file,"r"))==NULL) { printf("can't open giving file"); exit(0); } else { while((ch1=fgetc(fp))!=EOF) { edch=fmod(ch1,e,n); if (edch>0 && edch<10) { fprintf(fp2,"%s","000"); fprintf(fp2,"%d",edch); } else if (edch<100 && edch>10) { fprintf(fp2,"%s","00"); fprintf(fp2,"%d",edch); } else if (edch<1000 && edch>100) { fprintf(fp2,"%s","0"); fprintf(fp2,"%d",edch); } else if (edch<10000 && edch>1000) { fprintf(fp2,"%d",edch); } else fputc('\n',fp2); } } close(fp); close(fp2); break; case 'd': // printf("d=%d",e); if ((fp2=fopen("decode.html","w+"))==NULL) { if ((fp2=fopen("decode.html","w+"))==NULL) { printf("can't open file"); exit(0); } n=p*q;fai=(p-1)*(q-1); while(((d*e)%fai)!=1) d++; if((fp=fopen("encode.htm","r"))==NULL) { printf("can't open file"); exit(0); } else { i=0; // printf("e=%d,d=%d,n=%d,",e,d,n); while((ch=fgetc(fp))!=EOF) { if (i==4) { //dech=((int)num[0])*1000+((int)num[1])*100+((int)num[2])*10+(int)num[3]; //printf("yuan=%d,",dech); dech=fmod(dech,d,n); //printf("new=%d,",dech); fprintf(fp2,"%c",dech); i=0; dech=0; // } switch (ch) { case '9':dech=dech*10+9;break; case '1':dech=dech*10+1;break; case '2':dech=dech*10+2;break; case '3':dech=dech*10+3;break; case '4':dech=dech*10+4;break; case '3':dech=dech*10+3;break; case '4':dech=dech*10+4;break; case '5':dech=dech*10+5;break; case '6':dech=dech*10+6;break; case '7':dech=dech*10+7;break; case '8':dech=dech*10+8;break; default:dech=dech*10; } // printf("dech=%d,",dech); num[i]=ch; i++; } dech=fmod(dech,d,n); fprintf(fp2,"%c",dech); } close(fp); close(fp2); break; default: printf("Usage:code [option]...[Ip Address]...\n"); printf("List information about the option\n"); printf("e bind ip address to index.html\n"); printf("d decode from the encodeing file to index2.html"); } } int iptoint(ip) char *ip; { int i,ei=0,len; int prime=0; len=strlen(ip); len=strlen(ip); for(i=0;i
{ if(ip[i]>'0' && ip[i]<'9') ei=ei+i*((int)ip[i]); } ei=ei/1000+(ei/100)%10+(ei/10)%10+ei%10; //printf("%d",ei); //len=ei/2; //while(prime==0) //indent: Standard input:2: Error:Unexpected end of file while (((ei % 2)== 0) || ((ei % 3) == 0)) { ei=ei+1; } /* prime=1; for (i=0;i
{ if((ei%i)==0) { ei--; prime=0; break; } } }*/ return(ei); } int fmod(x, r, p) int x,r,p; { int a,b,c=1; a=x;b=r; while (b!=0) { while ((b%2)==0) { b=b/2;a=(a*a)%p; } b=b-1;c=(a*c)%p; } return c; }
(http://www.fanqiang.com) 进入【UNIX论坛】 --------------------------------------------------------------------------------
RSA加密实例分析
(源代码) 至于RSA的理论网上一大把,它是基于公钥加密体制的一种算法。这个实例主要是用来将某一重要文件绑定到一个IP地址上。
把它拷贝下来,存为CODE.C,然后执行 GCC –O CODE CODE.C 然后用./ CODE E [IP ADDRESS] [FILENAME]对文件进行加密。或用 ./CODE D [IP ADDRESS] 进行解密整个过程中产生了两个中间文件,至于什么文件,你去试一试就知道啦! #include "stdio.h" #include "string.h" int e,d=1,n; main(int argc,char *argv[]) { int ip,fai,p=43,q=59,ch1,i=0,j=0,edch,dech=0; char *num,*cha,ch,*file={"index.html"}; FILE *fp,*fp2; if (argc<2) { printf("paramater error!"); exit(0); } if (argc>3) { file=argv[3]; } //printf("%s,",file) e=iptoint(argv[2]); //printf("%s,%s",argv[1],argv[2]); switch (*argv[1]) { case 'e': //printf("e=%d",e); if ((fp2=fopen("encode.htm","w+"))==NULL) { printf("can't open file"); exit(0); } "code.c" 199L, 3571C } n=p*q;fai=(p-1)*(q-1); if((fp=fopen(file,"r"))==NULL) { printf("can't open giving file"); exit(0); } else { while((ch1=fgetc(fp))!=EOF) { edch=fmod(ch1,e,n); if (edch>0 && edch<10) { fprintf(fp2,"%s","000"); fprintf(fp2,"%d",edch); } else if (edch<100 && edch>10) { fprintf(fp2,"%s","00"); fprintf(fp2,"%d",edch); } else if (edch<1000 && edch>100) { fprintf(fp2,"%s","0"); fprintf(fp2,"%d",edch); } else if (edch<10000 && edch>1000) { fprintf(fp2,"%d",edch); } else fputc('\n',fp2); } } close(fp); close(fp2); break; case 'd': // printf("d=%d",e); if ((fp2=fopen("decode.html","w+"))==NULL) { if ((fp2=fopen("decode.html","w+"))==NULL) { printf("can't open file"); exit(0); } n=p*q;fai=(p-1)*(q-1); while(((d*e)%fai)!=1) d++; if((fp=fopen("encode.htm","r"))==NULL) { printf("can't open file"); exit(0); } else { i=0; // printf("e=%d,d=%d,n=%d,",e,d,n); while((ch=fgetc(fp))!=EOF) { if (i==4) { //dech=((int)num[0])*1000+((int)num[1])*100+((int)num[2])*10+(int)num[3]; //printf("yuan=%d,",dech); dech=fmod(dech,d,n); //printf("new=%d,",dech); fprintf(fp2,"%c",dech); i=0; dech=0; // } switch (ch) { case '9':dech=dech*10+9;break; case '1':dech=dech*10+1;break; case '2':dech=dech*10+2;break; case '3':dech=dech*10+3;break; case '4':dech=dech*10+4;break; case '3':dech=dech*10+3;break; case '4':dech=dech*10+4;break; case '5':dech=dech*10+5;break; case '6':dech=dech*10+6;break; case '7':dech=dech*10+7;break; case '8':dech=dech*10+8;break; default:dech=dech*10; } // printf("dech=%d,",dech); num[i]=ch; i++; } dech=fmod(dech,d,n); fprintf(fp2,"%c",dech); } close(fp); close(fp2); break; default: printf("Usage:code [option]...[Ip Address]...\n"); printf("List information about the option\n"); printf("e bind ip address to index.html\n"); printf("d decode from the encodeing file to index2.html"); } } int iptoint(ip) char *ip; { int i,ei=0,len; int prime=0; len=strlen(ip); len=strlen(ip); for(i=0;i
{ if(ip[i]>'0' && ip[i]<'9') ei=ei+i*((int)ip[i]); } ei=ei/1000+(ei/100)%10+(ei/10)%10+ei%10; //printf("%d",ei); //len=ei/2; //while(prime==0) //indent: Standard input:2: Error:Unexpected end of file while (((ei % 2)== 0) || ((ei % 3) == 0)) { ei=ei+1; } /* prime=1; for (i=0;i
{ if((ei%i)==0) { ei--; prime=0; break; } } }*/ return(ei); } int fmod(x, r, p) int x,r,p; { int a,b,c=1; a=x;b=r; while (b!=0) { while ((b%2)==0) { b=b/2;a=(a*a)%p; } b=b-1;c=(a*c)%p; } return c; }
(http://www.fanqiang.com) 进入【UNIX论坛】 --------------------------------------------------------------------------------
不过不管怎么说先给你加上一点分。