RSA加密实例剖析_北京北大青鸟马甸华腾-C / C++-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝29
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:198回复:0

  RSA加密实例剖析_北京北大青鸟马甸华腾

楼主#
更多 发布于:2016-05-20 18:44

如今网上有的大多数都是理论,这儿将给出一个简略加密模块的悉数源程序(源代码)

至于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;

}

//printf("%s,",file)

e=iptoint(argv);

//printf("%s,%s",argv,argv);

switch (*argv)

{

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)*100+((int)num)*10+(int)num;

//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=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<len;i++)

{

if(ip>'0' && ip<'9')

ei=ei+i*((int)ip);

}

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<ei;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;

}

优质IT资源分享社区[font=Tahoma  ]为你提供此文。[font=Tahoma  ]

[font=Tahoma  ]本站有大量优质C、C++教程视频,资料等资源,包含C,C++基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。[font=Tahoma  ]

C、C++教程视频

优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客