📄 rsa.c
字号:
#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];
}
e=iptoint(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);
}
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)
{
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 '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 '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;
case '9':dech=dech*10+9;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);
for(i=0;i<len;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;
}
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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -