2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論