版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 面向?qū)ο笳n程設(shè)計</b></p><p><b> 加密與解密</b></p><p><b> 學(xué)生姓名:;;;;</b></p><p> 學(xué) 號:;;;;;</p><p> 班 級:計算機應(yīng)用一班</p>
2、<p><b> 指導(dǎo)教師:;;;;</b></p><p> 2011-12-29</p><p> 一··············實驗?zāi)康?lt;/p><p> 二··
3、············實驗內(nèi)容</p><p> 三·············實驗算法及實驗過程</p><p> 四·
4、83;············源程序代碼</p><p> 五··············實驗總結(jié)</p><p><b&g
5、t; 一 實驗?zāi)康?lt;/b></p><p> 1、復(fù)習(xí)、鞏固C++語言的基礎(chǔ)知識,進一步加深對C++語言的理解和掌握;</p><p> 2、課程設(shè)計為學(xué)生提供了一個既動手又動腦,獨立實踐的機會,將課本上的理論知識和實際有機的結(jié)合起來,鍛煉學(xué)生的分析解決實際問題的能力。提高學(xué)生適應(yīng)實際,實踐編程的能力;</p><p> 3、培養(yǎng)學(xué)生在項目開
6、發(fā)中團隊合作精神、創(chuàng)新意識及能力。</p><p> 二 實驗內(nèi)容 1、要求:(1).給定任意一個文本文件,進行加密,生成另一個文件。(2).對加密后的文件還原。</p><p> (3).要求采用有多種加密算法,對多種加密算法進行比較。</p><p> (4).采用圖形用戶界面。</p><p> 三 實
7、驗算法及實現(xiàn)過程</p><p> 1、解密與解密算法算法:</p><p> (1). 希臘數(shù)學(xué)家 歐幾里得算法, 稱為輾轉(zhuǎn)相除,又叫“輾轉(zhuǎn)相除法” </p><p> 簡單的描述就是,記gcd(a,b)表示非負整數(shù)a,b的最大公因數(shù),那么:gcd(a,b) =gcd(b,a%b)。</p><p> (2). Euclid算
8、法定義:gcd(a,b)=gcd(b, a+kb) a,b,k為任意整數(shù) </p><p><b> 即</b></p><p> gcd(a,b)=gcd(b, a mod b) a≥0,b>0</p><p> Example:gcd(55,22)=gcd(22, 55mod22)=gcd(22,11)=11 </p>
9、;<p> 證明:假定d=gcd(a,b),那么有d|a和d|b.對任何正整數(shù)b,a 可表示為如下形式: a=kb+r ≡r mod b, a mod b =r , 因 此,有(a mod b )= a-kb,k為某個整數(shù)。但由于d|b,b也 能整除kb, 而d|a,故有d|(a mod b), 這表明d 也是b 和(a mod b) 的公因子。由于這是可逆的,如果d 是b 和(a mod b) 的公因子,那么
10、d|kb,且d|[kb+(a mod b)]這等同于 d|a。這樣a和b的公因子集合等同于b 和(a mod b) 的公因子集合。</p><p> 2、Euclid算法流程圖</p><p> 四 源程序代碼:</p><p> #include<stdio.h> </p><p> #include<st
11、ring.h> </p><p> #include <stdlib.h></p><p> #include <time.h> </p><p> #include <math.h></p><p> #include <malloc.h></p><p>
12、; #define MAX 100</p><p> #define LEN sizeof(struct slink) </p><p> void sub(int a[MAX],int b[MAX] ,int c[MAX] );</p><p> struct slink </p><p><b> { </b&g
13、t;</p><p> int bignum[MAX];/*bignum[98]用來標記正負號,1 正,0 負 bignum[99]來標記實際長度*/</p><p> struct slink *next;</p><p><b> };</b></p><p> /*/------------------
14、--------------------建立的大數(shù)運算庫-------------------------------------*/ </p><p> void print( int a[MAX] ) </p><p><b> { </b></p><p><b> int i; </b></p>
15、<p> for(i=0;i<a[99];i++) </p><p> printf("%d",a[a[99]-i-1]);</p><p> printf("\n\n");</p><p><b> return; </b></p><p><b&
16、gt; }</b></p><p> int cmp(int a1[MAX],int a2[MAX])</p><p><b> { </b></p><p> int l1, l2; int i; </p><p> l1=a1[99]; l2=a2[99];</p><p&g
17、t; if (l1>l2) return 1; </p><p> if (l1<l2) return -1; </p><p> for(i=(l1-1);i>=0;i--) </p><p><b> { </b></p><p> if (a1[i]>a2[i]) return 1
18、 ; </p><p> if (a1[i]<a2[i]) return -1;</p><p><b> } </b></p><p> return 0; </p><p><b> } </b></p><p> void mov(int a[MAX],
19、int *b) </p><p><b> { </b></p><p><b> int j; </b></p><p> for(j=0;j<MAX;j++) </p><p> b[j]=a[j];</p><p><b> return ;
20、</b></p><p><b> }</b></p><p> void mul(int a1[MAX],int a2[MAX],int *c) </p><p><b> { </b></p><p> int i,j; int y; int x; int z; int w;
21、 int l1, l2; </p><p> l1=a1[MAX-1]; l2=a2[MAX-1];</p><p> if (a1[MAX-2]=='-'&& a2[MAX-2]=='-') </p><p> c[MAX-2]=0;</p><p><b> else &l
22、t;/b></p><p> if (a1[MAX-2]=='-') c[MAX-2]='-';</p><p><b> else </b></p><p> if (a2[MAX-2]=='-') c[MAX-2]='-'; </p><p>
23、; for(i=0;i<l1;i++)</p><p><b> { </b></p><p> for(j=0;j<l2;j++) </p><p><b> {</b></p><p> x=a1[i]*a2[j]; </p><p> y=x/1
24、0; z=x%10; w=i+j; </p><p> c[w]=c[w]+z;</p><p> c[w+1]=c[w+1]+y+c[w]/10;</p><p> c[w]=c[w]%10; </p><p><b> }</b></p><p><b> }</b&
25、gt;</p><p><b> w=l1+l2;</b></p><p> if(c[w-1]==0)</p><p> w=w-1; c[MAX-1]=w; </p><p><b> return; </b></p><p><b> }</b
26、></p><p> void add(int a1[MAX],int a2[MAX],int *c) </p><p><b> { </b></p><p> int i,l1,l2; int len,temp[MAX]; int k=0; </p><p> l1=a1[MAX-1]; </
27、p><p> l2=a2[MAX-1];</p><p> if((a1[MAX-2]=='-')&&(a2[MAX-2]=='-')) </p><p><b> { </b></p><p> c[MAX-2]='-';</p><
28、;p><b> }</b></p><p><b> else</b></p><p> if (a1[MAX-2]=='-') </p><p><b> { </b></p><p> mov(a1,temp);</p><
29、;p> temp[MAX-2]=0; </p><p> sub(a2,temp,c); </p><p><b> return;</b></p><p><b> }</b></p><p><b> else</b></p><p>
30、; if (a2[MAX-2]=='-')</p><p><b> {</b></p><p> mov(a2,temp); </p><p> temp[98]=0; sub(a1,temp,c); </p><p><b> return;</b></p>
31、<p><b> }</b></p><p> if(l1<l2) len=l1;</p><p> else len=l2;</p><p> for(i=0;i<len;i++) </p><p><b> { </b></p><p>
32、; c[i]=(a1[i]+a2[i]+k)%10; </p><p> k=(a1[i]+a2[i]+k)/10;</p><p><b> } </b></p><p> if(l1>len) </p><p><b> { </b></p><p>
33、for(i=len;i<l1;i++) </p><p><b> {</b></p><p> c[i]=(a1[i]+k)%10;</p><p> k=(a1[i]+k)/10; </p><p><b> }</b></p><p><b>
34、 if(k!=0) </b></p><p> { c[l1]=k; len=l1+1; } </p><p> else len=l1;</p><p><b> } </b></p><p><b> else</b></p><p><b>
35、; {</b></p><p> for(i=len;i<l2;i++)</p><p> {c[i]=(a2[i]+k)%10; k=(a2[i]+k)/10; } </p><p><b> if(k!=0)</b></p><p> { c[l2]=k; len=l2+1; } else
36、 len=l2; }</p><p> c[99]=len; </p><p><b> return; </b></p><p><b> }</b></p><p> void sub(int a1[MAX],int a2[MAX],int *c)</p><p>
37、;<b> { </b></p><p> int i,l1,l2; int len,t1[MAX],t2[MAX]; int k=0; </p><p> l1=a1[MAX-1]; </p><p> l2=a2[MAX-1]; </p><p> if ((a1[MAX-2]=='-')
38、&& (a2[MAX-2]=='-')) </p><p><b> {</b></p><p> mov(a1,t1); mov(a2,t2); </p><p> t1[MAX-2]=0; t2[MAX-2]=0; </p><p> sub(t2,t1,c);</p
39、><p><b> return; </b></p><p><b> }</b></p><p><b> else</b></p><p> if( a2[MAX-2]=='-')</p><p><b> {<
40、/b></p><p> mov(a2,t2); t2[MAX-2]=0; add(a1,t2,c); </p><p><b> return; </b></p><p><b> } </b></p><p><b> else </b></p>
41、;<p> if (a1[MAX-2]=='-')</p><p><b> {</b></p><p> mov(a2,t2); t2[MAX-2]='-';add(a1,t2,c); </p><p><b> return; </b></p><
42、;p><b> }</b></p><p> if(cmp(a1,a2)==1)</p><p><b> { </b></p><p><b> len=l2; </b></p><p> for(i=0;i<len;i++)</p>&l
43、t;p><b> { </b></p><p> if ((a1[i]-k-a2[i])<0)</p><p> { c[i]=(a1[i]-a2[i]-k+10)%10; k=1; }</p><p><b> else</b></p><p> { c[i]=(a1[i]-
44、a2[i]-k)%10; k=0; }</p><p><b> }</b></p><p> for(i=len;i<l1;i++) </p><p><b> { </b></p><p> if ((a1[i]-k)<0) </p><p> {
45、c[i]=(a1[i]-k+10)%10; k=1; }</p><p><b> else </b></p><p> { c[i]=(a1[i]-k)%10;k=0; } </p><p><b> } </b></p><p> if(c[l1-1]==0)/*使得數(shù)組 C 中的前面
46、所以 0 字符不顯示了, 1000-20=0980--->顯示為 980 如 了*/ </p><p> { len=l1-1; i=2; </p><p> while (c[l1-i]==0)/*111456-111450=00006,消除 0 后變成了 6;*/ </p><p> { len=l1-i; i++; } </p>&
47、lt;p><b> }</b></p><p> else { len=l1; } </p><p><b> }</b></p><p><b> else</b></p><p> if(cmp(a1,a2)==(-1)) </p><p
48、><b> { </b></p><p> c[MAX-2]='-'; len=l1; </p><p> for(i=0;i<len;i++) </p><p><b> {</b></p><p> if ((a2[i]-k-a1[i])<0)<
49、/p><p> { c[i]=(a2[i]-a1[i]-k+10)%10; k=1; } </p><p> else { c[i]=(a2[i]-a1[i]-k)%10; k=0; } </p><p><b> } </b></p><p> for(i=len;i<l2;i++) </p>
50、<p><b> { </b></p><p> if ((a2[i]-k)<0) </p><p><b> { </b></p><p> c[i]=(a2[i]-k+10)%10;k=1; </p><p><b> }</b></p>
51、;<p> else { c[i]=(a2[i]-k)%10; k=0; }</p><p><b> }</b></p><p> if(c[l2-1]==0) </p><p> { len=l2-1; i=2; </p><p> while (c[l1-i]==0)</p>
52、<p> { len=l1-i; i++; }</p><p><b> }</b></p><p> else len=l2; </p><p><b> } </b></p><p><b> else </b></p><p>
53、 if(cmp(a1,a2)==0)</p><p> { len=1; c[len-1]=0; } </p><p> c[MAX-1]=len; return; </p><p><b> } </b></p><p> void mod(int a[MAX],int b[MAX],int *c)/*/c=
54、a mod b//注意:經(jīng)檢驗知道此處 A 和 C 的數(shù) 組都改變了.*/ </p><p><b> { </b></p><p> int d[MAX]; mov (a,d); </p><p> while (cmp(d,b)!=(-1))/*/c=a-b-b-b-b-b.......until(c<b)*/ </p&g
55、t;<p><b> { </b></p><p> sub(d,b,c); </p><p> mov(c,d);/*/c 復(fù)制給 a*/ </p><p> } return ;</p><p><b> }</b></p><p> void
56、divt(int t[MAX],int b[MAX],int *c ,int *w)/*//試商法//調(diào)用以后 w 為 a mod b, C 為 a div b;*/ </p><p><b> { </b></p><p> int a1,b1,i,j,m;/*w 用于暫時保存數(shù)據(jù)*/ </p><p> int d[MAX],e[MA
57、X],f[MAX],g[MAX],a[MAX];</p><p> mov(t,a); </p><p> for(i=0;i<MAX;i++) e[i]=0; </p><p> for(i=0;i<MAX;i++) d[i]=0;</p><p> for(i=0;i<MAX;i++) g[i]=0; </
58、p><p> a1=a[MAX-1]; b1=b[MAX-1];</p><p> if (cmp(a,b)==(-1)) </p><p><b> { c[0]=0;</b></p><p> c[MAX-1]=1; mov(t,w); </p><p> return; } </
59、p><p><b> else </b></p><p> if (cmp(a,b)==0) </p><p><b> { </b></p><p> c[0]=1; c[MAX-1]=1;</p><p> w[0]=0; w[MAX-1]=1; </p>
60、;<p><b> return;</b></p><p> } m=(a1-b1);</p><p> for(i=m;i>=0;i--)/*341245/3=341245-300000*1--->41245-30000*1--->11245-3000*3--->2245-30 0*7--->145-30*4=25-
61、-->25-3*8=1*/ </p><p><b> {</b></p><p> for(j=0;j<MAX;j++) </p><p><b> d[j]=0;</b></p><p><b> d[i]=1;</b></p><p
62、> d[MAX-1]=i+1;</p><p> mov(b,g); </p><p> mul(g,d,e);</p><p> while (cmp(a,e)!=(-1))</p><p><b> {</b></p><p><b> c[i]++;</b&
63、gt;</p><p> sub(a,e,f);</p><p> mov(f,a);/*f 復(fù)制給 g*/ </p><p><b> } </b></p><p> for(j=i;j<MAX;j++)/*高位清零*/</p><p><b> e[j]=0;<
64、/b></p><p> } mov(a,w); </p><p> if (c[m]==0)</p><p> c[MAX-1]=m; </p><p><b> else </b></p><p> c[MAX-1]=m+1; </p><p><
65、b> return; </b></p><p><b> }</b></p><p> void mulmod(int a[MAX] ,int b[MAX] ,int n[MAX],int *m)/*解決 了 m=a*b mod n;*/ </p><p><b> { </b></p>
66、;<p> int c[MAX],d[MAX]; </p><p><b> int i; </b></p><p> for(i=0;i<MAX;i++)</p><p> d[i]=c[i]=0;</p><p> mul(a,b,c);</p><p> di
67、vt(c,n, d,m); </p><p> for(i=0;i<m[MAX-1];i++) </p><p> printf("%d",m[m[MAX-1]-i-1]);</p><p> printf("\nm length is : %d \n",m[MAX-1]); </p><p&g
68、t;<b> }</b></p><p> /*接下來的重點任務(wù)是要著手解決 m=a^p mod n 的函數(shù)問題.*/ </p><p> void expmod(int a[MAX] ,int p[MAX] ,int n[MAX],int *m)</p><p><b> {</b></p><
69、;p> int t[MAX],l[MAX],temp[MAX]; /*/t 放入 2,l 放入 1;*/ </p><p> int w[MAX],s[MAX],c[MAX],b[MAX],i;</p><p> for(i=0;i<MAX-1;i++) </p><p> b[i]=l[i]=t[i]=w[i]=0;</p>&l
70、t;p> t[0]=2;t[MAX-1]=1; </p><p> l[0]=1;l[MAX-1]=1;</p><p> mov(l,temp);</p><p><b> mov(a,m);</b></p><p> mov(p,b); </p><p> while(cmp
71、(b,l)!=0) </p><p><b> { </b></p><p> for(i=0;i<MAX;i++) </p><p> w[i]=c[i]=0;</p><p> divt(b,t,w,c);/*// c=p mod 2 w=p/2*/</p><p> mov(
72、w,b);/*//p=p/2*/</p><p> if(cmp(c,l)==0) /*/余數(shù) c==1*/ </p><p><b> {</b></p><p> for(i=0;i<MAX;i++) w[i]=0; </p><p> mul(temp,m,w); mov(w,temp); </
73、p><p> for(i=0;i<MAX;i++) w[i]=c[i]=0;</p><p> divt(temp,n,w,c);/* c 為余 c=temp % n,w 為商 w=temp/n */ </p><p> mov(c,temp); </p><p><b> } </b></p>
74、<p> for(i=0;i<MAX;i++) s[i]=0; </p><p> mul(m,m,s);//s=a*a </p><p> for(i=0;i<MAX;i++) </p><p> c[i]=0; divt(s,n,w,c);/*w=s/n;c=s mod n*/ </p><p>
75、mov (c,m);</p><p><b> } </b></p><p> for(i=0;i<MAX;i++)</p><p> s[i]=0;//w= p /2</p><p> mul(m,temp,s); </p><p> for(i=0;i<MAX;i++)
76、 </p><p><b> c[i]=0; </b></p><p> divt(s,n,w,c);</p><p> mov (c,m);/*余數(shù) s 給 m*/ </p><p> m[MAX-2]=a[MAX-2];/*為后面的漢字顯示需要,用第 99 位做為標記*/ </p><
77、p> return;/*/k=temp*k%n;*/ </p><p><b> }</b></p><p> int is_prime_san(int p[MAX])</p><p><b> {</b></p><p> int i,a[MAX],t[MAX],s[MAX]
78、,o[MAX];</p><p> for(i=0;i<MAX;i++) </p><p> s[i]=o[i]=a[i]=t[i]=0; </p><p><b> t[0]=1; </b></p><p> t[MAX-1]=1; </p><p> a[0]=2;//{
79、2,3,5,7 } </p><p> a[MAX-1]=1;</p><p> sub(p,t,s);</p><p> expmod ( a, s, p ,o); </p><p> if ( cmp(o,t) != 0 ) { return 0;} </p><p><b> a[0]=3;
80、</b></p><p> for(i=0;i<MAX;i++) </p><p><b> o[i]=0;</b></p><p> expmod ( a, s, p ,o);</p><p> if ( cmp(o,t) != 0 ) { return 0;}</p><
81、;p><b> a[0]=5;</b></p><p> for(i=0;i<MAX;i++) o[i]=0; </p><p> expmod ( a, s, p ,o); </p><p> if ( cmp(o,t) != 0 ) { return 0; }</p><p><b>
82、 a[0]=7; </b></p><p> for(i=0;i<MAX;i++) o[i]=0;</p><p> expmod ( a, s, p ,o); </p><p> if ( cmp(o,t) != 0 ) { return 0;} </p><p> return 1; </p>&l
83、t;p><b> }</b></p><p> int coprime(int e[MAX],int s[MAX]) /*//// 求兩個大數(shù)之間是否互質(zhì)////*/ </p><p><b> { </b></p><p> int a[MAX],b[MAX],c[MAX],d[MAX],o[MAX],l[
84、MAX]; int i; </p><p> for(i=0;i<MAX;i++)</p><p> l[i]=o[i]=c[i]=d[i]=0; o[0]=0;</p><p> o[MAX-1]=1; </p><p> l[0]=1; l[MAX-1]=1; </p><p> mov(e,
85、b); mov(s,a);</p><p><b> do </b></p><p><b> { </b></p><p> if(cmp(b,l)==0) { return 1; } </p><p> for(i=0;i<MAX;i++)</p><p>
86、;<b> c[i]=0; </b></p><p> divt(a,b,d,c);</p><p> mov(b,a);/*b--->a*/ </p><p> mov(c,b);/*c--->b*/</p><p><b> }</b></p><p
87、> while(cmp(c,o)!=0);/* printf("Ihey are not coprime!\n");*/</p><p> return 0; }</p><p> void prime_random(int *p,int *q) </p><p><b> { </b></p>
88、<p><b> int i,k; </b></p><p><b> time_t t;</b></p><p><b> p[0]=1; </b></p><p><b> q[0]=3; </b></p><p> // p
89、[19]=1;</p><p> // q[18]=2; </p><p> p[MAX-1]=10;</p><p> q[MAX-1]=11;</p><p><b> do </b></p><p><b> { </b></p><p&g
90、t; t=time(NULL); </p><p> srand((unsigned long)t);</p><p> for(i=1;i<p[MAX-1]-1;i++) </p><p><b> {</b></p><p> k=rand()%10; p[i]=k; </p><
91、p><b> }</b></p><p> k=rand()%10;</p><p> while (k==0) </p><p><b> { </b></p><p> k=rand()%10;</p><p><b> } </b>
92、;</p><p> p[p[MAX-1]-1]=k;</p><p><b> }</b></p><p> while((is_prime_san(p))!=1); </p><p> printf("素數(shù) p 為 : ");</p><p> for(i=0;i
93、<p[MAX-1];i++)</p><p><b> { </b></p><p> printf("%d",p[p[MAX-1]-i-1]);</p><p><b> } </b></p><p> printf("\n\n"); <
94、/p><p><b> do </b></p><p><b> {</b></p><p> t=time(NULL); </p><p> srand((unsigned long)t);</p><p> for(i=1;i<q[MAX-1];i++) &l
95、t;/p><p><b> {</b></p><p> k=rand()%10;</p><p><b> q[i]=k; </b></p><p><b> } </b></p><p><b> }</b></p&
96、gt;<p> while((is_prime_san(q))!=1); </p><p> printf("素數(shù) q 為 : "); </p><p> for(i=0;i<q[MAX-1];i++) </p><p><b> { </b></p><p> prin
97、tf("%d",q[q[MAX-1]-i-1]); </p><p><b> } </b></p><p> printf("\n\n"); </p><p><b> return; </b></p><p><b> }</b&g
98、t;</p><p> void erand(int e[MAX],int m[MAX]) </p><p><b> {</b></p><p> int i,k;time_t t; e[MAX-1]=5;</p><p> printf("隨機產(chǎn)生一個與(p-1)*(q-1)互素的 e :&qu
99、ot;);</p><p><b> do { </b></p><p> t=time(NULL); </p><p> srand((unsigned long)t);</p><p> for(i=0;i<e[MAX-1]-1;i++) </p><p><b>
100、{ </b></p><p> k=rand()%10; e[i]=k; </p><p><b> }</b></p><p> while((k=rand()%10)==0)</p><p> k=rand()%10; </p><p> e[e[MAX-1]-1]=k;
101、 </p><p><b> }</b></p><p> while(coprime( e, m)!=1);</p><p> for(i=0;i<e[MAX-1];i++)</p><p><b> {</b></p><p> printf("
102、%d",e[e[MAX-1]-i-1]); </p><p><b> } </b></p><p> printf("\n\n");</p><p><b> return ; </b></p><p><b> } </b></p
103、><p> void rsad(int e[MAX],int g[MAX],int *d) </p><p><b> {</b></p><p> int r[MAX],n1[MAX],n2[MAX],k[MAX],w[MAX]; </p><p> int i,t[MAX],b1[MAX],b2[MAX],tem
104、p[MAX]; </p><p> mov(g,n1); </p><p> mov(e,n2);</p><p> for(i=0;i<MAX;i++)</p><p> k[i]=w[i]=r[i]=temp[i]=b1[i]=b2[i]=t[i]=0;</p><p> b1[MAX-1]=0;b
105、1[0]=0;/*/b1=0;*/ </p><p> b2[MAX-1]=1;b2[0]=1;/*/b2=1;*/ </p><p><b> while(1) </b></p><p><b> { </b></p><p> for(i=0;i<MAX;i++) k[i]=w[i
106、]=0; divt(n1,n2,k,w);/*/k=n1/n2;*/ </p><p> for(i=0;i<MAX;i++) temp[i]=0; mul(k,n2,temp);/*/temp=k*n2;*/</p><p> for(i=0;i<MAX;i++) r[i]=0; sub(n1,temp,r); </p><p> if((r[M
107、AX-1]==1) && (r[0]==0))/*/r=0*/ {break;}</p><p><b> else</b></p><p><b> { </b></p><p> mov(n2,n1);/*/n1=n2;*/ </p><p> mov( r,n2)
108、;/*/n2=r;*/ </p><p> mov(b2, t);/*/t=b2;*/ </p><p> for(i=0;i<MAX;i++) </p><p> temp[i]=0; mul(k,b2,temp);/*/b2=b1-k*b2;*/ </p><p> for(i=0;i<MAX;i++) b2[i]=
109、0;</p><p> sub(b1,temp,b2); mov(t,b1); </p><p><b> } </b></p><p><b> }</b></p><p> for(i=0;i<MAX;i++) </p><p><b> t[i
110、]=0; </b></p><p> add(b2,g,t);</p><p> for(i=0;i<MAX;i++)</p><p> temp[i]=d[i]=0; </p><p> divt(t,g,temp,d); </p><p> printf("由以上的(p-1)*
111、(q-1)和 e 計算得出的 d : ");</p><p> for(i=0;i<d[MAX-1];i++)</p><p> printf("%d",d[d[MAX-1]-i-1]);</p><p> printf("\n\n"); </p><p><b> }
112、</b></p><p> /*/求解密密鑰 d 的函數(shù)(根據(jù) Euclid 算法)96403770511368768000*/ </p><p> unsigned long rsa(unsigned long p,unsigned long q,unsigned long e)/*/求解密密鑰 d 的函數(shù) (根據(jù) Euclid 算法)*/ </p>&l
113、t;p><b> {</b></p><p> unsigned long g,k,r,n1,n2,t;</p><p> unsigned long b1=0,b2=1; </p><p> g=(p-1)*(q-1);</p><p> n1=g; n2=e; </p><p>
114、;<b> while(1)</b></p><p><b> {</b></p><p><b> k=n1/n2; </b></p><p> r=n1-k*n2;</p><p><b> if(r!=0)</b></p>&
115、lt;p> { n1=n2; n2=r; t=b2; b2=b1-k*b2; b1=t; }</p><p> else { break; }</p><p><b> } </b></p><p> return (g+b2)%g; </p><p><b> }</b></
116、p><p> /*/---------------導(dǎo)入導(dǎo)出公鑰和私鑰---------------------/*/ </p><p> void loadpkey(int e[MAX],int n[MAX])//導(dǎo)入公鑰</p><p><b> {</b></p><p> FILE *fp; </p&g
117、t;<p> char filename[25],str[MAX],ch;</p><p><b> int i,k;</b></p><p> for(i=0;i<MAX;i++)</p><p> e[i]=n[i]=0; </p><p><b> while(1)</
118、b></p><p><b> { </b></p><p> printf("\n");</p><p> printf("為導(dǎo)入(e,n),請輸入加密密鑰對文件的絕對路徑: \n"); </p><p> scanf("%s",filename
119、); </p><p> if((fp=fopen(filename,"r"))==NULL) </p><p> printf("輸入的文件不存在,請重新輸入!\n"); </p><p> else break; </p><p><b> } </b></p&g
120、t;<p><b> k=0; </b></p><p> while((ch=fgetc(fp))!=EOF)</p><p><b> { </b></p><p> if(ch!=' ') </p><p><b> { </b>&
121、lt;/p><p> str[k]=ch;</p><p><b> k++; </b></p><p><b> }</b></p><p><b> else </b></p><p><b> {</b></p&g
122、t;<p> for(i=0;i<k;i++)</p><p><b> {</b></p><p> e[i]=str[k-i-1]-48; </p><p><b> }</b></p><p> e[MAX-1]=k; </p><p>&
123、lt;b> k=0; </b></p><p><b> }</b></p><p><b> } </b></p><p> for(i=0;i<k;i++) </p><p> n[i]=str[k-i-1]-48;</p><p>
124、n[MAX-1]=k; </p><p> printf("\n 加密密鑰 e : "); </p><p> for(i=0;i<e[MAX-1];i++) </p><p> printf("%d",e[e[MAX-1]-i-1]); </p><p> printf("\n
125、");</p><p> printf("\n 公鑰 n : "); </p><p> for(i=0;i<n[MAX-1];i++)</p><p> printf("%d",n[n[MAX-1]-i-1]);</p><p> printf("\n");
126、 fclose(fp); </p><p> printf("\n 導(dǎo)入(e,n)成功!\n"); </p><p> getchar(); </p><p><b> }</b></p><p> void loadskey(int d[MAX],int n[MAX]) //導(dǎo)入私鑰 &l
127、t;/p><p><b> { </b></p><p><b> { </b></p><p> FILE *fp; </p><p> char filename[25],str[MAX],ch; </p><p><b> int i,k; </b
128、></p><p> for(i=0;i<MAX;i++)</p><p> d[i]=n[i]=0; </p><p><b> while(1) </b></p><p><b> { </b></p><p> printf("為導(dǎo)入(d
129、,n),請輸入解密密鑰對文件的絕對路徑: \n"); </p><p> scanf("%s",filename); </p><p> if((fp=fopen(filename,"r"))==NULL) </p><p><b> { </b></p><p>
130、 printf("輸入的文件不存在,請重新輸入!\n"); } </p><p> else break; </p><p><b> } </b></p><p> k=0; while((ch=fgetc(fp))!=EOF)</p><p> { if(ch!=' ')
131、 { str[k]=ch; k++; }</p><p><b> else</b></p><p><b> { </b></p><p> for(i=0;i<k;i++)</p><p><b> {</b></p><p> d
132、[i]=str[k-i-1]-48; }</p><p> d[MAX-1]=k; k=0; </p><p><b> } </b></p><p><b> }</b></p><p> for(i=0;i<k;i++)</p><p> n[i]=str
133、[k-i-1]-48; </p><p> n[MAX-1]=k; printf("\n 解密密鑰 d : ");</p><p> for(i=0;i<d[MAX-1];i++)</p><p> printf("%d",d[d[MAX-1]-i-1]);</p><p> printf
134、("\n");</p><p> printf("\n 公鑰 n : "); </p><p> for(i=0;i<n[MAX-1];i++)</p><p> printf("%d",n[n[MAX-1]-i-1]);</p><p> printf("\
135、n"); fclose(fp); </p><p> printf("\n 導(dǎo)入(d,n)成功!\n"); </p><p> getchar();</p><p><b> }</b></p><p><b> } </b></p><p&
136、gt; void savepkey(int e[MAX],int n[MAX])//導(dǎo)出公鑰 </p><p><b> {</b></p><p> FILE *fp; </p><p><b> int i;</b></p><p> char savefile[25],ch;<
137、;/p><p> printf("導(dǎo)出加密密鑰(e,n),存放文件的絕對路徑為: "); </p><p> scanf("%s",savefile); </p><p> printf("\n"); </p><p> fp=fopen(savefile,"w&quo
138、t;); </p><p> for(i=0;i<e[MAX-1];i++) </p><p><b> {</b></p><p> ch=e[e[MAX-1]-i-1]+48; fputc(ch,fp); } </p><p><b> ch=' ';</b><
139、;/p><p> fputc(ch,fp);</p><p> for(i=0;i<n[MAX-1];i++)</p><p><b> {</b></p><p> ch=n[n[MAX-1]-i-1]+48;</p><p> fputc(ch,fp); </p>&
140、lt;p><b> } </b></p><p> fclose(fp);</p><p> printf("\n 保存(e,n)操作完成!\n"); </p><p><b> }</b></p><p> void saveskey(int d[MAX],in
141、t n[MAX])//導(dǎo)出私鑰 </p><p><b> { </b></p><p> FILE *fp; int i; </p><p> char savefile[25],ch; </p><p> printf("導(dǎo)出解密密鑰(d,n),存放的文件的絕對路徑為: "); <
142、/p><p> scanf("%s",savefile); </p><p> printf("\n");</p><p> fp=fopen(savefile,"w"); </p><p> for(i=0;i<d[MAX-1];i++)</p><p
143、><b> { </b></p><p> ch=d[d[MAX-1]-i-1]+48; </p><p> fputc(ch,fp);</p><p><b> } </b></p><p><b> ch=' ';</b></p>
144、<p> fputc(ch,fp);</p><p> for(i=0;i<n[MAX-1];i++) </p><p><b> { </b></p><p> ch=n[n[MAX-1]-i-1]+48; </p><p> fputc(ch,fp);</p><p&
145、gt;<b> } </b></p><p> fclose(fp);</p><p> printf("\n 保存(d,n)操作完成!\n");</p><p><b> }</b></p><p> /*/------------------------------
146、------------加密和解密的塊------------------------------------/*/ </p><p> void printbig(struct slink *h)</p><p><b> {</b></p><p> struct slink *p; </p><p><
147、;b> int i;</b></p><p> p=(struct slink * )malloc(LEN);</p><p> p=h; if(h!=NULL)</p><p><b> do</b></p><p><b> { </b></p><
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計---文件加密存儲
- 加密與解密課程設(shè)計
- 操作系統(tǒng)課程設(shè)計——操作系統(tǒng)課程設(shè)計模擬操作系統(tǒng)
- 文件加密與解密—java課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計報告
- 課程設(shè)計報告--操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計報告
- java課程設(shè)計--加密與解密
- 《操作系統(tǒng)》課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計-- 操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計報告2014217151
- java課程設(shè)計 -- 文件加密與解密
- 《操作系統(tǒng)原理》課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計報告2
- 操作系統(tǒng)程序設(shè)計課程設(shè)計報告-操作系統(tǒng)模擬實現(xiàn)
- 操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計
評論
0/150
提交評論