版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
#includc<stdio.h>
#include<string.h>
#includc<stdlib.h>
#include<time.h>
#include<math.h>
#include<malloc.h>
#defineMAX100
#defineLENsizeof(structslink)
voidsub(intafMAXLintb[MAX],intc[MAX]);
structslink
(
inibignum[MAX];
/*bignum[98]用來(lái)標(biāo)記正負(fù)號(hào),1正,0負(fù)bignum[99]來(lái)標(biāo)記實(shí)際長(zhǎng)度*/
structslink*next;
};
/*/---------------------------自己建立的大數(shù)運(yùn)算庫(kù)--------------------------*/
voidprint(inta[MAX])
(
inti;
for(i=0;i<af99];i++)
printf("%d",a|a[99]-i-l]);
printf("\n\nu);
return;
intcmp(intal[MAX],inta2[MAX])
{int11,12;
inti;
ll=al[99];
I2=a2[99];
if(132)
returnI;
if(llv⑵
return-1;
for(i=(lI-l);i>=0;i—)
(
if(al[i]>a2[il)
return1;
if(al[i]<a2[i])
return-1;
return0;
I
voidmov(inta[MAX],int*b)
(
intj;
for(j=0;j<MAX;j-+)
bfjl=a[jl;
return;
voidmul(intal[MAX],inta2[MAX],int*c)
(
intij;
inty;
intx;
intz;
intw;
int11,12;
ll=aI[MAX-l];
12=a2[MAX-l];
if(al[MAX-2]=='-'&&a2(MAX-2]==,-')
c[MAX-2]=0;
elseif(al[MAX-2]==,-')
c[MAX-2]='-';
elseif(a2[MAX-2]=='-')
c[MAX-21;
for(i=0;i<li;i++)
(
for(j=0;j<12;j++)
(
x=al[i]*a2[j];
y=x/10;
z=x%10;
w=i+j;
c[w]=c[w]+z;
c[w+l]=c[w+l]+y+clw]/l0;
c[w]=c[w]%10;
w=ll+12;
if(c[w-l]==O)w=w-l;
c[MAX-l]=w;
return;
voidadd(intallMAX],inta2lMAX],int*c)
(
inti,II,12;
intlen,temp[MAX];
intk=0;
ll=al[MAX-l];
12=a2[MAX-l];
if((al[MAX.2]==)&&(a2[MAX?2]==u))
(
c[MAX-21='-';
)
elseif(al[MAX-2]==,-')
(
mov(al,temp);
temp[MAX-2]=0;
sub(a2,temp,c);
return;
)
elseif(a2[MAX-2]==,-')
(
mov(a2,temp);
temp[98]=0;
sub(aI,(emp,c);
return;
)
if(ll<12)len=ll;
elselen=12;
for(i=0;i<len;i++)
c[i]=(al[i]+a2[i]+k)%10;
k=(allij+a2lij+k)/l();
)
if(ll>len)
(
for(i=len;i<l1;i++)
c[i]=(al[i]+k)%10;
elseif(a2[MAX-2]=='-')
{
mov(a2,t2);
(2[MAX-2]=0;
add(al,t2,c);
retuni;
)
elseif(al[MAX-2J==*-')
|
mov(a2,t2);
l2[MAX-2]=',;
add(al,t2,c);
return;
}
if(cmp(al,a2)==l)
{
len=12;
for(i=0;i<len;i++)
{
if((al[i]-k-a2[i])<0)
{
c[iJ=(al[i]-a2[iJ-k+10)%10;
k=l;
)
else
(
c[i]=(al[i]-a2[i]-k)%10;
k=0;
for(i=len;i<ll;i++)
{
if((al[i]-k)<0)
c[il=(al[i]-k+10)%10;
k=l;
else
c[il=(al[i]-k)%10;
k=0;
if(c[ll-l]==O)/*使得數(shù)組C中的前面所以0字符不顯示了,如1000-20=0980—>顯示為980
了切
{
len=Il-l;
i=2;
while(c[ll-il==O)/*l11456-111450=00006,消退0后變成了6:*/
(
len=ll-i;
i++;
else
{
len=ll;
)
)
else
if(cmp(a1,a2)=(-1))
(
c[MAX-2]='-';
len=ll;
for(i=0;i<len;i++)
(
if((a2[i]-k-al[iJ)<0)
(
clij=(a2[i]-al[iJ-k+10)%10;
k=l;
)
else
{
c[i]=(a2[i]-al[i]-k)%IO;
k=0;
for(i=lcn;i<12;i++)
(
if((a2[i]-k)<0)
c[i]=(a2[i]-k+10)%1Q;
k=l;
else
(
c[i]=(a2[i]-k)%10;
k=0;
)
1
if(c[12-l]==0)
{
len=12-l;
i=2;
while(c[ll-i]==O)
(
len=ll-i;
i++;
}
1
elselen=12;
elseif(cmp(al,a2)==0)
(
len=l;
c[len-l]=O;
)
c[MAX-l]=len;
return;
voidmod(inta[MAX],intb[MAX],int*c)/*/c=amodb〃留意:經(jīng)檢驗(yàn)知道此處A和C的數(shù)
組都變更了。*/
{inid[MAX];
mov(a,d);
while(cmp(d,b)!=(-1))/*/c=a-b-b-b-b-b......until(c<b)*/
(
sub(d,b,c);
mov(c,d);/*/c復(fù)制給a*/
}
return;
voiddivt(intt[MAX],intb|MAX],int*cJnt試商法〃調(diào)用以后w為amodb,C為a
divb;*Z
intal,bl,i,j,m;/*w用于短暫保存數(shù)據(jù)*/
intdlMAXJ,elMAX],flMAX],g[MAX],alMAX];
mov(t,a);
for(i=0;i<MAX:i-+)
e[i]=0;
fbr(i=O;i<MAX;i++)
d[i]=0;
for(i=0;i<MAX;i++)g[iJ=O;
al=a[MAX-l];
bl=b[MAX-l];
if(cmp(a.b)==(-l))
{
c[0]=0;
c[MAX-l]=l;
inov(t,w);
return;
)
elseif(cmp(a,b)==0)
{
c[O]=I;
c[MAX-l]=l;
w[0]=0;
w[MAX-l]=l;
return;
1
m=(al-bl);
for(i=m;i>=0;i-)/*341245/3=341245-300000*I—>41245-30000*1-->11245-3000*3—>2245-30
0*7—>145-30*4=25—>25-3*8=I*/
{
for(j=0;j<MAX;j++)
dfjl=O;
d[i]=l;
d[MAX-l]=i+l;
mov(b,g);
mul(g,d,e);
while(cmp(a,e)!=(-l))
(
c[i]++;
sub(a,e,f);
mov(f,a);/*f復(fù)制給g*/
)
for(j=i;jvMAX;j++)戶高位清零列
e[j]=O;
I
mov(a,w);
if(c[m]==O)c[MAX-l]=m;
elsec[MAX-l]=m+1;
return;
}
voidmulmod(inta[MAX],intb[MAX],intn[MAX],int*m)/*解決了m=a*bmodn;*/
(
intc[MAXJ,d[MAX];
inti;
for(i=0;i<MAX;i++)
d[i]=c[i]=O;
mul(a,b,c);
divt(c,n,d,m);
for(i=0;i<m[MAX-1];i++)
printf("%d",m[m[MAX-1]-i-1]);
printf("\nmlengthis:%d\n",m[MAX-l]);
)
/*接下來(lái)的重點(diǎn)任務(wù)是要著手解決mF、modn的函數(shù)問(wèn)題。*/
voidexpmod(inta[MAX].intp[MAX],intn[MAX].int*m)
{
intw[MAXJ,s[MAXJ,c[MAX],blMAX],i;
for(i=0;i<MAX-l;i++)
b[i]=l[i]=t[i]=w[i]=O;
t[0]=2;t[MAX-l]=l;
1[O]=1;1[MAX-1]=1;
mov(l,temp);
mov(a,m);
mov(p,b);
while(cnip(b,l)!=O)
(
for(i=0;i<MAX;i++)
w[i]=c[i]=O;
divt(b,t,w,c);/*//c=pmod2w=p/2*/
niov(w,b);/*//p=p/2*/
if(cmp(c,l)==0)/*/余數(shù)c==1*/
|
for(i=0;i<MAX;i++)
w[i]=0;
mul(tcmp,m,vv);
mov(wjenip);
for(i=0;i<MAX;i++)
w[i]=c[i]=0;
divt(tcmp,n,w,c);/*/c為余c=tcmp%n,w為商w=temp/n*/
mov(c,temp);
)
for(i=0;i<MAX;i++)
s[i]=0;
mul(m,m,s);//s=a*a
for(i=0;i<MAX;i++)
c[i]=0;
divt(s,n,w.c);/*/w=s/n;c=smodn*/
mov(c,m);
for(i=0;i<MAX;i++)
s[i]=0;
mul(m,temp,s);
for(i=0;i<MAX;i++)
c[i]=O;
divt(s,n,w,c);
mov(c,m);/*余數(shù)s給m*/
m[MAX-2]=a|MAX-2];/*為后面的漢字顯示須要,用第99位做為標(biāo)記*/
return;
/*/k=temp*k%n;*/
intis_prime_san(intp[MAX])
inti,a[MAX],t[MAX],s(MAX],o[MAX];
for(i=0;i<MAX;i++)
s[i]=o|i]=ali]=t[i]=0;
t[MAX-l]=l;
a[0]=2;/Z{2,3,5,7)
a[MAX-l]=l;
sub(p,t,s);
expmod(a,s,p,o);
if(cnip(o,t)!=0)
(
return0:
a[0]=3;
for(i=0;i<MAX;i++)o[i]=O;
expmod(a,s,p,o);
if(cnip(o,t)!=0)
return0;
a[0j=5;
for(i=0;i<MAX;i++)o[i]=0;
expmod(a,s,p,o);
if(cmp(o,t)!=0)
(
return0;
a[0]=7;
for(i=0;i<MAX;i++)o[i]=0;
expmod(a,s,p,o);
if(cmp(o,t)!=0)
(
return0;
}
return1;
inicoprime(inte[MAX],ints[MAX])/*////求兩個(gè)大數(shù)之間是否互質(zhì)〃〃*/
(
inta[MAX],b[MAX],c[MAX],d[MAX],o[MAX],l[MAX];
inti;
for(i=0;i<MAX;i++)
l[i]=o[i]=c[i]=d[i]=0;
o[0]=0;o[MAX-l]=l;
l[0]=l;i[MAX-l]=l;
mov(e,b);
mov(s.a);
do
(
if(cmp(b,l)=0)
(
return1;
for(i=0;i<MAX;i++)
c[i]=O;
divt(a,b,d,c);
mov(b,a);/*b—>a*/
mov(c,b);/*c->b*/
|while(cmp(c,o)!=0);
/*printf("Iheyarenotcoprime!\nH);*/
return0;
}
voidprime_random(int*pjnt*q)
(
inti.k;
t;
pfO]=l;
qlOJ=3;
//p[19]=l;
//q[18]=2;
p[MAX-lJ=IO;
q[MAX-l]=ll;
do
(
t=time(NULL);
srand((unsignedlong)t);
for(i=1;i<p[MAX-1]-l;i++)
|
k=rand()%10;
p[i]=k;
)
k=rand()%10;
while(k==0)
{
k=rand()%I();
)
p[p[MAX-l]-l]=k;
}while((is_prime_san(p))!=1);
prinif(”素?cái)?shù)p為:");
for(i=0;i<p[MAX-l];k+)
printf("%d';p[p[MAX-l]-i-l]);
printf("\n\n");
do
(
t=time(NULL);
srand((unsignedlong)t);
fbr(i=1;i<q[MAX-1];i++)
{
k=rand()%10;
q[i]=k;
I
}while((is_prime_san(q))!=1);
printf("素?cái)?shù)q為:");
for(i=O;i<q[MAX-l];i++)
{
printf("%d",q[q[MAX-1]-i-1]);
)
printf("\n\n");
return;
voiderand(inte[MAX],intm[MAX])
(
inti,k;
time_tt;
e[MAX-l]=5;
printf("隨機(jī)產(chǎn)生一個(gè)與(p-l)*(q-l)互素的e
do
(
t=time(NULL);
srand((unsignedlong)t);
for(i=0;i<e[MAX-l]-l;i++)
{
k=rand()%10;
e[i]=k;
)
while((k=rand()%10)=0)
k=rand()%IO;
e[e[MAX-l]-l]=k;
}while(coprime(e,m)!=l);
for(i=0;i<e[MAX-1];i++)
printf("%d",e[e[MAX-1]-i-1]);
1
printf("\n\n");
return;
)
voidrsad(inte[MAX],intglMAXJJnt*d)
(
intr[MAXJ,n1[MAX],n2[MAX],k[MAX],w[MAX]:
inii,t[MAX],bi[MAXLb2(MAXLtemp[MAX];
mov(g,n1);
mov(e,n2);
for(i=0;i<MAX;i++)
k[i]=w[i]=r[i]=ternp[i]=bI[i]=b2[iJ=t[i]=0;
bl[MAX-l]=0;bl[0]=0;/*/b1=0;*/
h2lMAX-l]=1;b2[0]=1;/*/b2=1;*/
while⑴
{
for(i=0;i<MAX;i++)
k[i]=w[i]=0;
divt(n1,n2,k,w);/*/k=n1/n2;*/
for(i=0;i<MAX;i++)
temp[i]=0:
mul(k,n2,temp);/*/temp=k*n2;*/
for(i=0;i<MAX;i++)
r[i]=0;
sub(nI,tempi);
if((r[MAX-lj==l)&&(r[O]==O))/*/r=O*/
(
break;
)
else
{
mov(n2,nl);/*/nl=n2;*/
mov(r,n2);/*/n2=r;*/
mov(b2,l);/*/t=b2;*/
for(i=0;i<MAX;i++)
temp[i]=0;
mul(k,b2,temp);/*/b2=b1-k*b2;*/
for(i=0;i<MAX;i++)
b2[i]=0;
sub(bl,tcnip.b2);
mov(t.bl);
for(i=0;i<MAX;i++)
t[i]=0;
add(b2,g,t);
fbr(i=O;i<MAX;i++)
tcmp[iJ=dli]=O;
divl(t,g.temp,d);
primf("由以上的(p?D*(q?l)和e計(jì)算得出的d:");
for(i=0;i<d[MAX-l];i++)
printf("%d,\d[dIMAX-11-i-l]);
printf("\n\n");
unsignedlongrsa(unsignedlongp,unsignedlongq,unsignedlonge)/*/求解密密鑰d的函數(shù)
(依據(jù)Euclid算法)*/
(
unsignedlongg,k,r,nl,n2,t;
unsignedlongbI=0,b2=I;
g=(p-l)*(q-D;
nl=g;
n2=e;
while(l)
k=nl/n2;
r=nl-k*n2;
if(r!=O)
{
nl=n2;
n2=r;
t=b2;
b2=bl-k*b2;
bl=t;
)
else
break;
return(g+b2)%g;
)
/*/-----------------------------導(dǎo)入導(dǎo)出公鑰和私鑰一
voidloadpkey(inte[MAX],intn[MAX])〃導(dǎo)入公鑰
|
FILE*fp;
charfilename[25],str[MAX],ch;
inti,k;
for(i=0;i<MAX;i++)
cri]=n[il=O;
while(l)
(
printf("\n");
prindT為導(dǎo)入(e,n),請(qǐng)輸入加密密鑰對(duì)文件路徑:\n");
scanf("%s",filename);
if((fp=fopcn(filcnamc,"r"))==NULL)
prinlf("輸入的文件不存在,請(qǐng)重新輸入!\n)
elsebreak;
}
k=0;
while((ch=fgetc(fp))!=EOF)
{
if(ch!='r)
(
str(k]=ch;
k++;
)
else
{
for(i=0;i<k;i++)
{
e[i]=str[k-i-l]-48;
)
e[MAX-l]=k;
k=0;
for(i=0;i<k;i++)
n[i]=str(k-i-l]-48:
n[MAX-l]=k;
printfC'Vn加密密鑰e:");
for(i=0;i<e[MAX-IJ;i++)
printf("%d”,乖[MAX-1]-i-1]);
printfCAn");
printfC'Xn公鑰n:");
fbr(i=O;i<n[MAX-l];i++)
printf("%d,r,n[n[MAX-1]-i-1]);
printf("\n");
lclose(fp);
printf("\n導(dǎo)入(e,n)勝利!\n");
getchar();
}
voidloadskcy(intd[MAX],intn[MAX])〃導(dǎo)入私鑰
(
(
FILE*fp;
charfilename[25],str[MAX],ch;
inti,k;
for(i=0;i<MAX;i++)
d(i]=n[il=O;
while(l)
(
printf("為導(dǎo)入(d,n),請(qǐng)輸入解密密鑰對(duì)文件的路徑:\n");
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL)
(
prinlf(“輸入的文件不存在,請(qǐng)重新輸入!\n");
}
elsebreak;
}
k=0;
while((ch=fgetc(fp))!=EOF)
(
if(ch!='')
(
str[k]=ch;
k++;
else
for(i=0;i<k;i++)
(
d[i]=str[k-i-l]-48;
)
d[MAX-lj=k;
k=0;
)
for(i=0;i<k;i++)
nfi]=str[k-i-11-48;
n[MAX-l]=k;
printf("\n解密密鑰d:");
for(i=0;i<d|MAX-l];i++)
printf("%d”,d[d[MAX-1卜i-1]);
printfC'Xn");
printf("\n公鑰n:");
for(i=0;i<n[MAX-1];i++)
printf("%d",n[n(MAX-1]-i-1]);
printf("\n");
fclose(fp);
printf(u\n導(dǎo)入(d,n)勝利!\n");
getchar();
voidsavepkey(inie|MAX],intn[MAX「)〃導(dǎo)出公鑰
(
FILE*fp:
inti;
charsavefile[25],ch;
primf("導(dǎo)出加密密鑰(e,n),存放的文件路徑為:");
scanf("%s",savefile);
printf("\n");
fp=fopenCsavefile/'w'*);
fbr(i=O;i<e[MAX-l];i++)
(
ch=e[e[MAX-l]-i-l]+48;
fputc(ch.fp);
ch='
fputc(ch.fp);
fbr(i=O;i<n[MAX-l];i++)
ch=n|n[MAX-l]-i-l]+48;
fputc(ch.fp);
fclose(fp);
printf("\n保存(e,n)操作完成!\n");
)
voidsaveskey(intd[MAXJ,intn[MAX])〃導(dǎo)出私鑰
(
FILE*fp;
inti;
charsavefile[25],ch:
printf("導(dǎo)出解密密鑰(dm),存放的文件路徑為:");
scanf("%s",savefile);
printf("\n");
fp=fopen(savefile,"w");
for(i=0;i<d[MAX-l];i++)
{
ch=d[d[MAX-l]-i-l]+48;
fputc(ch,fp);
)
ch-
fputc(ch.fp);
for(i=0;i<n[MAX-l];i++)
{
ch=n[n[MAX-l]-i-l]+48;
fpuic(ch,fp);
}
fclose(fp);
printf("\n保存(d,n)操作完成!\n");
/*/.............................加密和解密的塊........................./*/
voidprintbig(structslink*h)
(
structslink*p;
inti;
p=(slructslink*)malloc(LEN);
p=h;
if(h!=NULL)
do
for(i=0;i<p->bignum[MAX-i];i++)
printf(',%d",p->bignum[p->bignum[MAX-1]-i-1J);
p=p->next;
}
while(p!=NULL);
printf("\n\n");
voidtencrypto(inte[MAX],intn[MAX])/*〃對(duì)有須要的文件進(jìn)行加密*/
|
FILE*fp;
inti,k,count,temp,c;
charfilenamef251,ch,encryfile[25];
structslink*p,*pl,*p2;
structslink*h;
h=p=p1=p2=(structslink*)malloc(LEN);
h=NULL;
printf("\n輸入須要加密的文件路徑:");
scanf(,'%su,filename);
if((fp=fopen(filename,"r"))==NULL)
(
printf("Cannotopenfile!\n");
exit(O);
)
printf("\n文件的原文內(nèi)容:\n\n");
count=0;
while((ch=fgetc(fp))!=EOF)
(
putchar(ch);
c=ch;
k=0;
if(c<0)
{
c=abs(c);/*/把負(fù)數(shù)取正并且做一個(gè)標(biāo)記*/
pl->bignum[MAX-2]='O';
)
else
pl->bignum[MAX-2]-1*;
)
while(c/l()!=O)
tcmp=c%10;
c=c/10;
p1->bignum[k]=temp;
k++;
)
pl->bignum[k]=c;
pI-^bignumfMAX-1l=k+1;
count=count+1;
if(count==l)
h=pl;
elsep2->next=pl;
P2=pl;
pI=(structslink*)inalloc(LEN);
)
p2->next=NULL;
printf("\n^^);
fclose(fp);
//printf("加密后文件的保存路徑八n”);
//scanf("%s'\encryfile);
//fp=fopen(encryfile,"w");
fp=fopcn(filcnaine,"w");
p=pl=(structslink*)malloc(LEN);
p=h;
prinif("\n加密后文件中所形成密文:\n\n");
if(h!=NULL)
do
{
expmod(p->bignum,e,n,pl->bignum);
ch=pl->bignum[MAX-2];
printf("%cH,ch);
fputc(chjp);
if((pl?>bignum[MAX-l]/10)==0)/*/推斷pl->bignum[99]的是否大于十;*/
{
ch=0+48;
printf("%c",ch);
fputc(ch.fp);
ch=p1->bignum[MAX-1]+48;
prinlf("%c",ch);
fputc(ch,fp);
else
ch=pl->bignum[MAX-1]/10+48;
printf("%c”,ch);
fpulc(ch,fp);
ch=p1->bignum[MAX-1]%10+48;
printf("%c",ch);
fputc(ch,fp);
for(i=0;i<p1->bignumlMAX-1];i++)
(
printf("%d'\p1->bignum[i]);
ch=pI->bignum[i]+48;
fputc(ch,fp);
)
p=p->next:
pl=(structslink?)malloc(LEN);
}whilc(p!=NULL);
printf("\n\n");
fclose(fp);
return;
)
voidtdccrypto(in(d[MAX],intn[MAXJ)
(
FILE亭fp;
structslink*h,*pl,*p2;
charch,encryfilel25],decryfile[25J;
inti,j,k,c,count,temp;
printf(n\n輸入加密過(guò)的文件路徑:");
scanf("%s",encryfile);
if((fp=fopen(cncryfile,"r"))==NULL)
{
printf("此文件不存在!\n");
exit(O);
)
printf("\n文件中密文內(nèi)容:\n\n");
i=0;
j=3;
count=0;
h=pl=p2=(structslink*)malloc(LEN);
while((ch=fgetc(fp))!=EOF)
putchar(ch);
c=ch;
if(j==3)
(
pI->bignum[MAX-2]=c;
j-;
)
elseif(j==2)
|
(emp=c-48;
卜;
)
elseif(j==D
(
p1->bignum[MAX-l]=temp:}:l0+c-48;
j-;
)
elseif(j==0)
(
pI->bignum[i]=c-48;
i++;
if(i==p1->bignum[MAX-1])
{
i=0;
j=3;
count++;
if(count==1)
h=pl;
elsep2->next=pl;
p2=pl;
p1=(structslink*)malloc(LEN);
)
)
)
p2->next=NULL;
printf("\n");
fclose(fp);
//prinif("解密后的明文文件保存路徑:\n");
//scanf("%s",decryfile);
//fp=fopen(decryfile,"w");
fp=fopen(encryfile,"w");
printf("\n解密密文后文件中的明文:\n\n");
p2=(structslink*)malloc(LEN);
pl=h;
k=0;
if(h!=NULL)/*/temp為暫存ASIIC碼的int值*/
do
{
for(i=0;i<MAX;i++)
p2-、bignum[i]=0;
expmod(pl->hignum,d,n,p2->bignum);
temp=p2->bignum|0]+p2->bignum[11*10+p2->bignum[21*100;
if((p2->bignum[MAX-2])=='0')
(
temp=0-temp;
}/*/轉(zhuǎn)化為正確的ASIIC碼,如-78-96形成漢字*/
ch=temp;/*str[k]—>ch*/
printf(',%c'\ch);/*str[k]—>ch*/
fputc(ch.fp);/*/寫(xiě)入文件str(kl--->ch*/
k++;
pl=pl->next;
p2=(structslink*)malloc(LEN);
}while(pl!=NULL);
printf("\n\n");
fclosc(fp);
return;
structslink*input(void)/*/輸入明文并且返回頭指針,沒(méi)有加密時(shí)候轉(zhuǎn)化的數(shù)字*/
(
structslink*head;
structslink*pl,*p2;
inti,n,c,temp;
charch;
n=0;
pl=p2=(structslink*)malloc(LEN);
head=NULL;
printf(”\n請(qǐng)輸入你所要加密的內(nèi)容:\n");
while((ch=getchar())!='\n')
(
i=0;
c=ch;
if(c<0)
c=abs(c);/*/把負(fù)數(shù)取正并且做一個(gè)標(biāo)記*/
p1->bignum[MAX-2]-0*;
)
else
(
p1->bignum[MAX-2]='r;
)
while(c/10!=0)
{
lemp=c%10;
c=c/10;
pI->bignum|i]=temp;
i++;
I
pl->bignum[i]=c;
pI->bignum[MAX-1J=i+1;
n=n+l;
if(n==l)
head=pI;
elsep2->next=pl;
P2=pl;
pl=(structslink*)malloc(LEN);
)
p2->next=NULL;
return(head);
structslink*jiami(inte[MAX],intn[MAX],structslink*head)
(
structslink*p;
structslink*h;
structslink*pl,*p2;
intm=0,i;
printfCVn'1);
printf("加密后形成的密文內(nèi)容:\n");
pl=p2=(structslink*)malloc(LEN);
h二NULL;
p=head;
if(head!=NULL)
do
expmod(p->bignum,e.n,pl->bignum);
for(i=0;i<pl->bignum[MAX-l];i++)
{
printf("%d",p1->bignum[pI->bignum[MAX-1]-1-i]);
}
m=m+l;
if(m==l)
h=pl;
elsep2->next=pl;
p2=pl;
pl=(structslink*)malloc(LEN);
p=p->next;
}while(p!=NULL);
p2->next=NULL;
p=h;
printfC'Xn");
return(h);
voidjiemi(intd[MAX].intr.[MAX],structslink*h)
(
in(i,j,lemp;
structslink
charch[65535];
pl=(structslink*)malloc(LEN);
p=h;
j=0;
if(h!=NULL)
do
{
for(i=0;i<MAX;i-+)
pl->bignum[iJ=O;
expmod(p->bignum,d,n,pl->bignum);
temp=pl->bignum[O]+p1->bignuni[l]*l0+p1->bignum[2]*100;
if((pI->bignum[MAX-2])=='O')
tcmp=O-tcnip;
ch[j]=temp;
j++;
p=p->next;
(while(p!=NULL);
printf("\n");
printf("解密留文后所生成的明文
for(i=0;i<j;i++)
prinlf("%c”,ch[i]);
printf("\n");
return;
voidmcnu()
(
printf("\n\n\n");
printf("\n\n\n");
printf("R-------產(chǎn)生密鑰對(duì)\n\n\n");
printf("S-------保存密鑰對(duì)\n\n\n");
printf("L-------載入密鑰對(duì)\n\n\n*');
printfCE-------對(duì)文件加密\n\n\n");
printf("D.......對(duì)文件解密\n\n\n**);
printfC'
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年派遣制阜陽(yáng)市婦女兒童醫(yī)院人員招聘11人備考題庫(kù)及1套完整答案詳解
- 2025年贛州市中小學(xué)教師招聘筆試備考試題及答案解析
- 攝影師面試題與創(chuàng)意考察方法
- 2025年污水生化試題題庫(kù)及答案
- 2025年云南硯山縣維摩鄉(xiāng)中心衛(wèi)生院招聘?jìng)淇碱}庫(kù)完整參考答案詳解
- 數(shù)字化工程師面試題集及答案解析
- 海口事業(yè)編聯(lián)考真題及答案
- 市場(chǎng)調(diào)研崗位的常見(jiàn)問(wèn)題及答案參考
- 2025年巴中市消防救援支隊(duì)面向社會(huì)第二次招錄政府專職消防員19人備考題庫(kù)及參考答案詳解1套
- 湖北鐵道運(yùn)輸職業(yè)學(xué)院(武漢鐵路技師學(xué)院)專項(xiàng)公開(kāi)招聘工作人員20人備考題庫(kù)參考答案詳解
- DB37∕T 5234-2022 超高程泵送混凝土應(yīng)用技術(shù)規(guī)程
- 設(shè)備管理二級(jí)管理制度
- 十五五學(xué)校五年發(fā)展規(guī)劃(2026-2030)
- 養(yǎng)老機(jī)構(gòu)5項(xiàng)精細(xì)化護(hù)理照料內(nèi)容+18張護(hù)理服務(wù)操作流程圖
- T/CCS 032-2023礦井智能化通風(fēng)系統(tǒng)建設(shè)技術(shù)規(guī)范
- 2025年四川中鐵建昆侖投資集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025-2030中國(guó)推拉高爾夫車(chē)行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析研究報(bào)告
- 醫(yī)院辦公室主任述職報(bào)告
- 人工智能驅(qū)動(dòng)提升國(guó)際傳播可及性的機(jī)制、困境及路徑
- 駕駛員心理健康培訓(xùn)課件
- 2024年-2025年司法考試真題及復(fù)習(xí)資料解析
評(píng)論
0/150
提交評(píng)論