RSA加密实例分析
2008-04-09 03:59:59来源:互联网 阅读 ()
转帖
现在网上有的大部分都是理论,这里将给出一个简单加密模块的全部源程序(源代码)
至于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入门
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash