RSA加密实例分析

2008-04-09 03:59:59来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

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)鷌)!=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) (ei/10) ei;

//printf("%d",ei);

//len=ei/2;

//while(prime==0)

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Java源码:CORBA入门

下一篇:如何编写自己的缓冲区溢出利用程序?