




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
.#include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>#include<math.h>#include<malloc.h>#defineMAX100#defineLENsizeof(structslink)感謝閱讀voidsub(inta[MAX],intb[MAX],intc[MAX]);精品文檔放心下載structslink{int bignum[MAX];/*bignum[98]用來標記正負號,1正,0負bignum[99]來標記實際長度*/謝謝閱讀structslink*next;};/*/-------------------------------------- 自 己 建 立 的 大 數(shù) 運 算 庫謝謝閱讀-------------------------------------*/精品文檔放心下載void print( inta[MAX]).{inti;for(i=0;i<a[99];i++)printf("%d",a[a[99]-i-1]);感謝閱讀printf("\n\n");return;}int cmp(inta1[MAX],inta2[MAX])感謝閱讀{ intl1,l2;inti;l1=a1[99];l2=a2[99];if(l1>l2)return1;if(l1<l2)return-1;for(i=(l1-1);i>=0;i--){if(a1[i]>a2[i])return1;.if(a1[i]<a2[i])return-1;}return0;}voidmov(inta[MAX],int*b)謝謝閱讀{intj;for(j=0;j<MAX;j++)b[j]=a[j];return;}voidmul(inta1[MAX],inta2[MAX],int*c)精品文檔放心下載{inti,j;inty;intx;intz;.intw;intl1,l2;l1=a1[MAX-1];l2=a2[MAX-1];if(a1[MAX-2]=='-'&&a2[MAX-2]=='-')精品文檔放心下載c[MAX-2]=0;elseif(a1[MAX-2]=='-')c[MAX-2]='-';elseif(a2[MAX-2]=='-')c[MAX-2]='-';for(i=0;i<l1;i++){for(j=0;j<l2;j++){x=a1[i]*a2[j];y=x/10;z=x%10;w=i+j;c[w]=c[w]+z;c[w+1]=c[w+1]+y+c[w]/10;c[w]=c[w]%10;}.}w=l1+l2;if(c[w-1]==0)w=w-1;c[MAX-1]=w;return;}voidadd(inta1[MAX],inta2[MAX],int*c)精品文檔放心下載{inti,l1,l2;intlen,temp[MAX];intk=0;l1=a1[MAX-1];l2=a2[MAX-1];if((a1[MAX-2]=='-')&&(a2[MAX-2]=='-'))感謝閱讀{c[MAX-2]='-';}elseif(a1[MAX-2]=='-'){mov(a1,temp);.temp[MAX-2]=0;sub(a2,temp,c);return;}elseif(a2[MAX-2]=='-'){mov(a2,temp);temp[98]=0;sub(a1,temp,c);return;}if(l1<l2)len=l1;elselen=l2;for(i=0;i<len;i++){c[i]=(a1[i]+a2[i]+k)%10;k=(a1[i]+a2[i]+k)/10;}if(l1>len){for(i=len;i<l1;i++).{c[i]=(a1[i]+k)%10;k=(a1[i]+k)/10;}if(k!=0){c[l1]=k;len=l1+1;}elselen=l1;}else{for(i=len;i<l2;i++){c[i]=(a2[i]+k)%10;k=(a2[i]+k)/10;}if(k!=0){c[l2]=k;len=l2+1;.}elselen=l2;}c[99]=len;return;}voidsub(inta1[MAX],inta2[MAX],int*c)精品文檔放心下載{inti,l1,l2;intlen,t1[MAX],t2[MAX];intk=0;l1=a1[MAX-1];l2=a2[MAX-1];if((a1[MAX-2]=='-')&&(a2[MAX-2]=='-'))感謝閱讀{mov(a1,t1);mov(a2,t2);t1[MAX-2]=0;t2[MAX-2]=0;sub(t2,t1,c);.return;}elseif(a2[MAX-2]=='-'){mov(a2,t2);t2[MAX-2]=0;add(a1,t2,c);return;}elseif(a1[MAX-2]=='-'){mov(a2,t2);t2[MAX-2]='-';add(a1,t2,c);return;}if(cmp(a1,a2)==1){len=l2;for(i=0;i<len;i++).{if((a1[i]-k-a2[i])<0){c[i]=(a1[i]-a2[i]-k+10)%10;謝謝閱讀k=1;}else{c[i]=(a1[i]-a2[i]-k)%10;k=0;}}for(i=len;i<l1;i++){if((a1[i]-k)<0){c[i]=(a1[i]-k+10)%10;k=1;}else.{c[i]=(a1[i]-k)%10;k=0;}}if(c[l1-1]==0)/*使得數(shù)組C中的前面所以0字符不顯示了,如1000-20=0980--->顯示精品文檔放心下載為980了*/{len=l1-1;i=2;while(c[l1-i]==0)/*111456-111450=00006,消除0后變成了6;*/感謝閱讀{len=l1-i;i++;}}else{len=l1;}.}elseif(cmp(a1,a2)==(-1)){c[MAX-2]='-';len=l1;for(i=0;i<len;i++){if((a2[i]-k-a1[i])<0){c[i]=(a2[i]-a1[i]-k+10)%10;感謝閱讀k=1;}else{c[i]=(a2[i]-a1[i]-k)%10;k=0;}}for(i=len;i<l2;i++){if((a2[i]-k)<0).{c[i]=(a2[i]-k+10)%10;k=1;}else{c[i]=(a2[i]-k)%10;k=0;}}if(c[l2-1]==0){len=l2-1;i=2;while(c[l1-i]==0){len=l1-i;i++;}}.elselen=l2;}elseif(cmp(a1,a2)==0){len=1;c[len-1]=0;}c[MAX-1]=len;return;}void mod(inta[MAX],intb[MAX],int *c)/*/c=amodb//注意:經檢驗知道此處A和精品文檔放心下載的數(shù)組都改變了。*/{intd[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復制給a*/感謝閱讀}.return;}void divt(intt[MAX],intb[MAX],int *c,int*w)/*//試商法//調用以后w為amodb,C精品文檔放心下載為a divb;*/{inta1,b1,i,j,m;/*w用于暫時保存數(shù)據(jù)*/精品文檔放心下載intd[MAX],e[MAX],f[MAX],g[MAX],a[MAX];感謝閱讀mov(t,a);for(i=0;i<MAX;i++)e[i]=0;for(i=0;i<MAX;i++)d[i]=0;for(i=0;i<MAX;i++)g[i]=0;精品文檔放心下載a1=a[MAX-1];b1=b[MAX-1];if(cmp(a,b)==(-1)){c[0]=0;.c[MAX-1]=1;mov(t,w);return;}elseif(cmp(a,b)==0){c[0]=1;c[MAX-1]=1;w[0]=0;w[MAX-1]=1;return;}m=(a1-b1);for(i=m;i>=0;i--)/*341245/3=341245-300000*1--->41245-30000*1--->11245-300感謝閱讀0*3--->2245-300*7--->145-30*4=25--->25-3*8=1*/謝謝閱讀{for(j=0;j<MAX;j++)d[j]=0;d[i]=1;d[MAX-1]=i+1;mov(b,g);.mul(g,d,e);while(cmp(a,e)!=(-1)){c[i]++;sub(a,e,f);mov(f,a);/*f復制給g*/}for(j=i;j<MAX;j++)/*高位清零*/精品文檔放心下載e[j]=0;}mov(a,w);if(c[m]==0)c[MAX-1]=m;elsec[MAX-1]=m+1;return;}voidmulmod(inta[MAX],intb[MAX],intn[MAX],int*m)/*解決了m=a*bmodn;*/謝謝閱讀.{intc[MAX],d[MAX];inti;for(i=0;i<MAX;i++)d[i]=c[i]=0;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("\nm lengthis: %d\n",m[MAX-1]);感謝閱讀}/*接下來的重點任務是要著手解決m=a^p modn的函數(shù)問題。*/感謝閱讀voidexpmod(inta[MAX],intp[MAX],intn[MAX],int*m)感謝閱讀{intt[MAX],l[MAX],temp[MAX];/*/t放入2,l放入1;*/感謝閱讀intw[MAX],s[MAX],c[MAX],b[MAX],i;謝謝閱讀for(i=0;i<MAX-1;i++)b[i]=l[i]=t[i]=w[i]=0;t[0]=2;t[MAX-1]=1;l[0]=1;l[MAX-1]=1;.mov(l,temp);mov(a,m);mov(p,b);while(cmp(b,l)!=0){for(i=0;i<MAX;i++)w[i]=c[i]=0;divt(b,t,w,c);/*//c=pmod2 w=p/2*/感謝閱讀mov(w,b);/*//p=p/2*/if(cmp(c,l)==0)/*/余數(shù)c==1*/感謝閱讀{for(i=0;i<MAX;i++)w[i]=0;mul(temp,m,w);mov(w,temp);.for(i=0;i<MAX;i++)w[i]=c[i]=0;divt(temp,n,w,c);/*/c為余c=temp%n,w為商w=temp/n*/謝謝閱讀mov(c,temp);}for(i=0;i<MAX;i++)s[i]=0;mul(m,m,s);//s=a*afor(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]=0;divt(s,n,w,c);mov(c,m);/*余數(shù)s給m*/m[MAX-2]=a[MAX-2];/*為后面的漢字顯示需要,用第99位做為標記*/謝謝閱讀return;/*/k=temp*k%n;*/}int is_prime_san(intp[MAX])謝謝閱讀{.inti,a[MAX],t[MAX],s[MAX],o[MAX];感謝閱讀for(i=0;i<MAX;i++)s[i]=o[i]=a[i]=t[i]=0;t[0]=1;t[MAX-1]=1;a[0]=2;//{2,3,5,7}a[MAX-1]=1;sub(p,t,s);expmod(a,s,p,o);if(cmp(o,t)!=0){return0;}a[0]=3;for(i=0;i<MAX;i++) o[i]=0;精品文檔放心下載expmod(a,s,p,o);if(cmp(o,t)!=0).{return0;}a[0]=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;}intcoprime(inte[MAX],ints[MAX])/*////求兩個大數(shù)之間是否互質////*/感謝閱讀{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-1]=1;l[0]=1;l[MAX-1]=1;mov(e,b);mov(s,a);do{if(cmp(b,l)==0){return1;.}for(i=0;i<MAX;i++)c[i]=0;divt(a,b,d,c);mov(b,a);/*b--->a*/mov(c,b);/*c--->b*/}while(cmp(c,o)!=0);/* printf("Iheyare notcoprime!\n");*/謝謝閱讀return0;}voidprime_random(int*p,int*q)精品文檔放心下載{inti,k;time_tt;p[0]=1;q[0]=3;// p[19]=1;// q[18]=2;.p[MAX-1]=10;q[MAX-1]=11;do{t=time(NULL);srand((unsignedlong)t);for(i=1;i<p[MAX-1]-1;i++){k=rand()%10;p[i]=k;}k=rand()%10;while(k==0){k=rand()%10;}p[p[MAX-1]-1]=k;}while((is_prime_san(p))!=1);精品文檔放心下載.printf("素數(shù)p為 :");for(i=0;i<p[MAX-1];i++){printf("%d",p[p[MAX-1]-i-1]);精品文檔放心下載}printf("\n\n");do{t=time(NULL);srand((unsignedlong)t);for(i=1;i<q[MAX-1];i++){k=rand()%10;q[i]=k;}}while((is_prime_san(q))!=1);精品文檔放心下載printf("素數(shù)q為:");for(i=0;i<q[MAX-1];i++){printf("%d",q[q[MAX-1]-i-1]);精品文檔放心下載}.printf("\n\n");return;}void erand(inte[MAX],intm[MAX])精品文檔放心下載{inti,k;time_tt;e[MAX-1]=5;printf("隨機產生一個與(p-1)*(q-1)互素的e:");感謝閱讀do{t=time(NULL);srand((unsignedlong)t);for(i=0;i<e[MAX-1]-1;i++){k=rand()%10;e[i]=k;}while((k=rand()%10)==0)k=rand()%10;e[e[MAX-1]-1]=k;.}while(coprime(e,m)!=1);謝謝閱讀for(i=0;i<e[MAX-1];i++){printf("%d",e[e[MAX-1]-i-1]);謝謝閱讀}printf("\n\n");return;}voidrsad(inte[MAX],intg[MAX],int*d)感謝閱讀{int r[MAX],n1[MAX],n2[MAX],k[MAX],w[MAX];精品文檔放心下載int i,t[MAX],b1[MAX],b2[MAX],temp[MAX];謝謝閱讀mov(g,n1);mov(e,n2);for(i=0;i<MAX;i++)k[i]=w[i]=r[i]=temp[i]=b1[i]=b2[i]=t[i]=0;精品文檔放心下載b1[MAX-1]=0;b1[0]=0;/*/b1=0;*/謝謝閱讀b2[MAX-1]=1;b2[0]=1;/*/b2=1;*/感謝閱讀while(1){.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(n1,temp,r);if((r[MAX-1]==1)&&(r[0]==0))/*/r=0*/精品文檔放心下載{break;}else{mov(n2,n1);/*/n1=n2;*/mov(r,n2);/*/n2=r;*/mov(b2,t);/*/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(b1,temp,b2);mov(t,b1);}}for(i=0;i<MAX;i++)t[i]=0;add(b2,g,t);for(i=0;i<MAX;i++)temp[i]=d[i]=0;divt(t,g,temp,d);printf("由以上的(p-1)*(q-1)和e計算得出的d:");謝謝閱讀for(i=0;i<d[MAX-1];i++)printf("%d",d[d[MAX-1]-i-1]);精品文檔放心下載printf("\n\n");}./*/求解密密鑰d的函數(shù)(根據(jù)Euclid算法)96403770511368768000*/精品文檔放心下載unsignedlong rsa(unsignedlongp,unsignedlongq,unsignedlonge) /*/求解密感謝閱讀密鑰d的函數(shù)(根據(jù)Euclid算法)*/{unsignedlongg,k,r,n1,n2,t;精品文檔放心下載unsignedlongb1=0,b2=1;g=(p-1)*(q-1);n1=g;n2=e;while(1){k=n1/n2;r=n1-k*n2;if(r!=0){n1=n2;n2=r;t=b2;b2=b1-k*b2;.b1=t;}else{break;}}return(g+b2)%g;}/*/------------------------------------------ 導 入 導精品文檔放心下載------------------------------------/*/謝謝閱讀voidloadpkey(inte[MAX],intn[MAX]) //導入公鑰謝謝閱讀
出 公
鑰 和
私
鑰{FILE*fp;charfilename[25],str[MAX],ch;謝謝閱讀inti,k;for(i=0;i<MAX;i++)e[i]=n[i]=0;while(1).{printf("\n");printf("為導入(e,n),請輸入加密密鑰對文件路徑:\n");感謝閱讀scanf("%s",filename);if((fp=fopen(filename,"r"))==NULL)精品文檔放心下載printf("輸入的文件不存在,請重新輸入!\n");感謝閱讀elsebreak;}k=0;while((ch=fgetc(fp))!=EOF)謝謝閱讀{if(ch!=''){str[k]=ch;k++;}else{for(i=0;i<k;i++){e[i]=str[k-i-1]-48;}.e[MAX-1]=k;k=0;}}for(i=0;i<k;i++)n[i]=str[k-i-1]-48;n[MAX-1]=k;printf("\n加密密鑰e:");for(i=0;i<e[MAX-1];i++)printf("%d",e[e[MAX-1]-i-1]);謝謝閱讀printf("\n");printf("\n 公鑰n:");for(i=0;i<n[MAX-1];i++)printf("%d",n[n[MAX-1]-i-1]);感謝閱讀printf("\n");fclose(fp);printf("\n導入(e,n)成功!\n");精品文檔放心下載getchar();}voidloadskey(intd[MAX],intn[MAX])//導入私鑰謝謝閱讀{.{FILE*fp;charfilename[25],str[MAX],ch;謝謝閱讀inti,k;for(i=0;i<MAX;i++)d[i]=n[i]=0;while(1){printf("為導入(d,n),請輸入解密密鑰對文件的路徑:\n");謝謝閱讀scanf("%s",filename);if((fp=fopen(filename,"r"))==NULL)謝謝閱讀{printf("輸入的文件不存在,請重新輸入!\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-1]-48;}d[MAX-1]=k;k=0;}}for(i=0;i<k;i++)n[i]=str[k-i-1]-48;n[MAX-1]=k;printf("\n解密密鑰d:");for(i=0;i<d[MAX-1];i++)printf("%d",d[d[MAX-1]-i-1]);精品文檔放心下載printf("\n");printf("\n 公鑰n:");for(i=0;i<n[MAX-1];i++)printf("%d",n[n[MAX-1]-i-1]);謝謝閱讀.printf("\n");fclose(fp);printf("\n導入(d,n)成功!\n");感謝閱讀getchar();}}voidsavepkey(inte[MAX],intn[MAX])//導出公鑰感謝閱讀{FILE*fp;int i;char savefile[25],ch;printf("導出加密密鑰(e,n),存放的文件路徑為:");謝謝閱讀scanf("%s",savefile);printf("\n");fp=fopen(savefile,"w");for(i=0;i<e[MAX-1];i++){ch=e[e[MAX-1]-i-1]+48;fputc(ch,fp);}ch='';.fputc(ch,fp);for(i=0;i<n[MAX-1];i++){ch=n[n[MAX-1]-i-1]+48;fputc(ch,fp);}fclose(fp);printf("\n保存(e,n)操作完成!\n");謝謝閱讀}voidsaveskey(intd[MAX],intn[MAX])//導出私鑰感謝閱讀{FILE*fp;int i;char savefile[25],ch;printf("導出解密密鑰(d,n),存放的文件路徑為:");感謝閱讀scanf("%s",savefile);printf("\n");fp=fopen(savefile,"w");for(i=0;i<d[MAX-1];i++){ch=d[d[MAX-1]-i-1]+48;.fputc(ch,fp);}ch='';fputc(ch,fp);for(i=0;i<n[MAX-1];i++){ch=n[n[MAX-1]-i-1]+48;fputc(ch,fp);}fclose(fp);printf("\n保存(d,n)操作完成!\n");感謝閱讀}/*/------------------------------------------謝謝閱讀
加
密 和 解
密
的 塊------------------------------------/*/感謝閱讀void printbig(structslink*h)謝謝閱讀{structslink*p;inti;.p=(structslink*)malloc(LEN);感謝閱讀p=h;if(h!=NULL)do{for(i=0;i<p->bignum[MAX-1];i++)感謝閱讀printf("%d",p->bignum[p->bignum[MAX-1]-i-1]);精品文檔放心下載p=p->next;}while(p!=NULL);printf("\n\n");}void tencrypto(inte[MAX],intn[MAX])/*//對有需要的文件進行加密*/精品文檔放心下載{FILE*fp;inti,k,count,temp,c;charfilename[25],ch,encryfile[25];精品文檔放心下載structslink *p,*p1,*p2;structslink *h;.h=p=p1=p2=(structslink*)malloc(LEN);謝謝閱讀h=NULL;printf("\n輸入需要加密的文件路徑:");謝謝閱讀scanf("%s",filename);if((fp=fopen(filename,"r"))==NULL)謝謝閱讀{printf("Cannotopenfile!\n");謝謝閱讀exit(0);}printf("\n文件的原文內容:\n\n");感謝閱讀count=0;while((ch=fgetc(fp))!=EOF)謝謝閱讀{putchar(ch);c=ch;k=0;if(c<0){c=abs(c);/*/把負數(shù)取正并且做一個標記*/謝謝閱讀p1->bignum[MAX-2]='0';}else.{p1->bignum[MAX-2]='1';}while(c/10!=0){temp=c%10;c=c/10;p1->bignum[k]=temp;k++;}p1->bignum[k]=c;p1->bignum[MAX-1]=k+1;count=count+1;if(count==1)h=p1;elsep2->next=p1;p2=p1;p1=(structslink*)malloc(LEN);謝謝閱讀}p2->next=NULL;printf("\n");.fclose(fp);// printf("加密后文件的保存路徑:\n");精品文檔放心下載// scanf("%s",encryfile);// fp=fopen(encryfile,"w");精品文檔放心下載fp=fopen(filename,"w");p=p1=(structslink*)malloc(LEN);感謝閱讀p=h;printf("\n加密后文件中所形成密文:\n\n");感謝閱讀if(h!=NULL)do{expmod(p->bignum,e,n,p1->bignum);精品文檔放心下載ch=p1->bignum[MAX-2];printf("%c",ch);fputc(ch,fp);if((p1->bignum[MAX-1]/10)==0)/*/判斷p1->bignum[99]的是否大于十;*/感謝閱讀{ch=0+48;printf("%c",ch);fputc(ch,fp);ch=p1->bignum[MAX-1]+48;.printf("%c",ch);fputc(ch,fp);}else{ch=p1->bignum[MAX-1]/10+48;感謝閱讀printf("%c",ch);fputc(ch,fp);ch=p1->bignum[MAX-1]%10+48;感謝閱讀printf("%c",ch);fputc(ch,fp);}for(i=0;i<p1->bignum[MAX-1];i++)謝謝閱讀{printf("%d",p1->bignum[i]);精品文檔放心下載ch=p1->bignum[i]+48;fputc(ch,fp);}p=p->next;p1=(structslink*)malloc(LEN);謝謝閱讀}while(p!=NULL);.printf("\n\n");fclose(fp);return;}void tdecrypto(intd[MAX],intn[MAX])感謝閱讀{FILE*fp;structslink*h,*p1,*p2;charch,encryfile[25],decryfile[25];精品文檔放心下載inti,j,k,c,count,temp;printf("\n輸入加密過的文件路徑:");感謝閱讀scanf("%s",encryfile);if((fp=fopen(encryfile,"r"))==NULL)精品文檔放心下載{printf("此文件不存在!\n");exit(0);}printf("\n文件中密文內容:\n\n");感謝閱讀i=0;j=3;.count=0;h=p1=p2=(structslink*)malloc(LEN);謝謝閱讀while((ch=fgetc(fp))!=EOF)謝謝閱讀{putchar(ch);c=ch;if(j==3){p1->bignum[MAX-2]=c;j--;}elseif(j==2){temp=c-48;j--;}elseif(j==1){p1->bignum[MAX-1]=temp*10+c-48;感謝閱讀j--;}.elseif(j==0){p1->bignum[i]=c-48;i++;if(i==p1->bignum[MAX-1]){i=0;j=3;count++;if(count==1)h=p1;elsep2->next=p1;p2=p1;p1=(structslink*)malloc(LEN);謝謝閱讀}}}p2->next=NULL;printf("\n");fclose(fp);.// printf("解密后的明文文件保存路徑:\n");感謝閱讀// scanf("%s",decryfile);// fp=fopen(decryfile,"w");精品文檔放心下載fp=fopen(encryfile,"w");printf("\n解密密文后文件中的明文:\n\n");感謝閱讀p2=(structslink*)malloc(LEN);感謝閱讀p1=h;k=0;if(h!=NULL)/*/temp為暫存ASIIC碼的int值*/感謝閱讀do{for(i=0;i<MAX;i++)p2->bignum[i]=0;expmod(p1->bignum,d,n,p2->bignum);感謝閱讀temp=p2->bignum[0]+p2->bignum[1]*10+p2->bignum[2]*100;謝謝閱讀if((p2->bignum[MAX-2])=='0')感謝閱讀{temp=0-temp;}/*/轉化為正確的ASIIC碼,如-78-96形成漢字 */感謝閱讀ch=temp;/* str[k]--->ch*/精品文檔放心下載printf("%c",ch);/* str[k]--->ch*/感謝閱讀fputc(ch,fp);/*/寫入文件str[k]--->ch*/謝謝閱讀.k++;p1=p1->next;p2=(structslink*)malloc(LEN);精品文檔放心下載}while(p1!=NULL);printf("\n\n");fclose(fp);return;}structslink*input(void)/*/輸入明文并且返回頭指針,沒有加密時候轉化的數(shù)字*/謝謝閱讀{struct slink*head;struct slink*p1,*p2;int i,n,c,temp;char ch;n=0;p1=p2=(structslink*)malloc(LEN);謝謝閱讀head=NULL;printf("\n請輸入你所要加密的內容:\n");感謝閱讀while((ch=getchar())!='\n')精品文檔放心下載.{i=0;c=ch;if(c<0){c=abs(c);/*/把負數(shù)取正并且做一個標記*/感謝閱讀p1->bignum[MAX-2]='0';}else{p1->bignum[MAX-2]='1';}while(c/10!=0){temp=c%10;c=c/10;p1->bignum[i]=temp;i++;}p1->bignum[i]=c;p1->bignum[MAX-1]=i+1;n=n+1;.if(n==1)head=p1;elsep2->next=p1;p2=p1;p1=(structslink*)malloc(LEN);精品文檔放心下載}p2->next=NULL;return(head);}structslink*jiami(int e[MAX],int n[MAX],struct slink*head)精品文檔放心下載{struct slink*p;struct slink*h;struct slink*p1,*p2;int m=0,i;printf("\n");printf("加密后形成的密文內容:\n");p1=p2=(structslink*)malloc(LEN);感謝閱讀h=NULL;.p=head;if(head!=NULL)do{expmod(p->bignum,e,n,p1->bignum);精品文檔放心下載for(i=0;i<p1->bignum[MAX-1];i++)感謝閱讀{printf("%d",p1->bignum[p1->bignum[MAX-1]-1-i]);謝謝閱讀}m=m+1;if(m==1)h=p1;elsep2->next=p1;p2=p1;p1=(structslink*)malloc(LEN);精品文檔放心下載p=p->next;} while(p!=NULL);p2->next=NULL;p=h;.printf("\n");return(h);}voidjiemi(intd[MAX],intn[MAX],struct slink*h)感謝閱讀{int i,j,temp;structslink*p,*p1;charch[65535];p1=(structslink*)malloc(LEN);感謝閱讀p=h;j=0;if(h!=NULL)do{for(i=0;i<MAX;i++)p1->bignum[i]=0;expmod(p->bignum,d,n,p1->bignum);精品文檔放心下載.temp=p1->bignum[0]+p1->bignum[1]*10+p1->bignum[2]*100;謝謝閱讀if((p1->bignum[MAX-2])=='0')感謝閱讀{temp=0-temp;}ch[j]=temp;j++;p=p->next;}while(p!=NULL);printf("\n");printf("解密密文后所生成的明文:\n");for(i=0;i<j;i++)printf("%c",ch[i]);printf("\n");return;}voidmenu().{printf("\n\n\n");printf("\n\n\n");printf("R--------產生密鑰對\n\n\n");printf("S--------保存密鑰對\n\n\n");printf("L--------載入密鑰對\n\n\n");printf("E--------對文件加密\n
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度軟裝行業(yè)展會組織與推廣合同
- 小學家委主任發(fā)言稿
- 閉門溝通發(fā)言稿
- 2025年新疆道路運輸從業(yè)資格證考試內容是什么
- 高中家長會:高三上學期家長會課件
- 內墻乳膠漆粉刷合同
- 2024年標準離婚協(xié)議
- 高中家長會 有效陪伴有力助學課件-高中暑期家長會
- 采購訂單狀態(tài)更新表
- 環(huán)境監(jiān)測與控制表格
- 2025年全國國家版圖知識競賽題庫及答案(中小學組)
- 《紅巖》中考試題(截至2024年)
- 2025年合肥職業(yè)技術學院單招職業(yè)適應性測試題庫完整版
- 2025年黑龍江旅游職業(yè)技術學院單招職業(yè)傾向性測試題庫匯編
- 2025年湖南城建職業(yè)技術學院單招職業(yè)技能測試題庫新版
- 國家基本藥物臨床應用指南
- 2025春-新版一年級語文下冊生字表(200個)
- 企業(yè)級軟件開發(fā)作業(yè)指導書
- 護士法律法規(guī)知識培訓
- 《中國古代文學史及作品選II》教學大綱
- 代工生產合同范本
評論
0/150
提交評論