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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  摘要:</b></p><p>  RSA算法是基于數(shù)論的公鑰密碼體制,是公鑰密碼體制中最優(yōu)秀的加密算法,同時也是第一個能同時用于加密和數(shù)字簽名的算法,也易于理解和操作。 RSA是被研究得最廣泛的公鑰算法,從提出到現(xiàn)在已近二十年,經(jīng)歷了各種攻擊的考驗,逐漸為人們接受,普遍認(rèn)為是目前最優(yōu)秀的公鑰方案之一。RSA的安全性依賴于大數(shù)的因子分解,但并沒有從理論上證明破譯

2、RSA的難度與大數(shù)分解難度等價。本文主要研究的內(nèi)容包括:第一,對RSA算法進(jìn)行了全面系統(tǒng)的介紹,包括RSA算法的應(yīng)用現(xiàn)狀和原理—大素數(shù)的產(chǎn)生、密鑰對的產(chǎn)生、對明文的加密運算和密文的解密運算,為具體實現(xiàn)打下了理論基礎(chǔ);第二,介紹了RSA機密體制的一些基本概念及原理;第三,詳述了RSA加密的設(shè)計與實現(xiàn),主要實現(xiàn)的模塊包括RSA密鑰的產(chǎn)生(一對公鑰和私鑰),RSA加密算法和解密算法的實現(xiàn);第五,對該系統(tǒng)進(jìn)行了整體的測試和分析改進(jìn); </

3、p><p>  關(guān)鍵詞:RSA算法;公鑰密碼體制;加密;解密;VC++</p><p><b>  目錄</b></p><p><b>  1 課題綜述1</b></p><p>  1.1 課題來源1</p><p>  1.2 課題意義1</p>

4、<p>  1.3 預(yù)期目標(biāo)1</p><p><b>  2 系統(tǒng)分析1</b></p><p>  2.1 基礎(chǔ)知識2</p><p>  2.2 總體方案4</p><p>  2.3 功能模塊4</p><p><b>  3 系統(tǒng)設(shè)計5<

5、;/b></p><p>  3.1 算法描述5</p><p>  3.2 流程圖7</p><p><b>  4 代碼編寫9</b></p><p>  5 運行與測試14</p><p>  5.1 產(chǎn)生公鑰和密鑰14</p><p>  

6、5.2 加密與解密14</p><p><b>  總 結(jié)16</b></p><p><b>  致 謝17</b></p><p><b>  參考文獻(xiàn)18</b></p><p><b>  1 課題綜述</b></p>&

7、lt;p><b>  1.1 課題來源</b></p><p>  隨著電子信息技術(shù)的迅速發(fā)展,人類已步入信息社會。但是由于整個社會形成了一個巨大的計算機網(wǎng)絡(luò),任何一個計算機網(wǎng)絡(luò)出現(xiàn)的安全問題,都會影響整個國家的網(wǎng)絡(luò)安全,所以信息安全、計算機網(wǎng)絡(luò)安全問題已引起了人類的高度重視。無論是在局域網(wǎng)還是在廣域網(wǎng)中,都存在著自然和人為等諸多因素的脆弱性和潛在威脅。故此,網(wǎng)絡(luò)的安全措施應(yīng)是能全方

8、位地針對各種不同的威脅和脆弱性,這樣才能確保網(wǎng)絡(luò)信息的保密性、完整性和可用性?,F(xiàn)代密碼學(xué)已成為信息安全技術(shù)的核心,密碼學(xué)是以研究通信安全保密的學(xué)科,即研究對傳輸信息采用何種秘密的變換以防止第三者對信息的竊取。公鑰密碼體制的特點是:接收方B產(chǎn)生一對密鑰(PK和SK);PK公開,SK保密;從PK推出SK是很困難的;A、B雙方通信時,A通過任何途徑取得B的公鑰,用B的公鑰加密信息,加密后的信息可通過任何不安全信道發(fā)送。B收到密文信息后,用自己

9、私鑰解密恢復(fù)出明文。公鑰密碼體制已成為確保信息的安全性的關(guān)鍵技術(shù)。RSA公鑰密碼體制到目前為止還是一種被認(rèn)可為安全的體制。</p><p><b>  1.2 課題意義</b></p><p>  RSA公鑰加密算法是第一個既能用于數(shù)據(jù)加密也能用于數(shù)字簽名的算法。它易于理解和操作,也十分流行。算法的名字以發(fā)明者的姓氏首字母命名:Ron Rivest, Adi Sha

10、mir 和Leonard Adleman。雖然自1978年提出以來,RSA的安全性一直未能得到理論上的證明,但它經(jīng)歷了各種攻擊,至今未被完全攻破。隨著越來越多的商業(yè)應(yīng)用和標(biāo)準(zhǔn)化工作,RSA已經(jīng)成為最具代表性的公鑰加密技術(shù)。VISA、MasterCard、IBM、Microsoft等公司協(xié)力制定的安全電子交易標(biāo)準(zhǔn)(Secure Electronic Transactions,SET)就采用了標(biāo)準(zhǔn)RSA算法,這使得RSA在我們的生活中幾乎無

11、處不在。網(wǎng)上交易加密連接、網(wǎng)上銀行身份驗證、各種信用卡使用的數(shù)字證書、智能移動電話和存儲卡的驗證功能芯片等,大多數(shù)使用RSA技術(shù)。應(yīng)用了RSA加密體制保證了秘密信息的安全。</p><p><b>  1.3 預(yù)期目標(biāo)</b></p><p>  在充分理解RSA加密體制概念和原理的基礎(chǔ)上,用Microsoft Visual C++ 6.0實現(xiàn)RSA加密與解密,演示

12、公鑰與密鑰的生成及加密與解密的過程。</p><p><b>  2 系統(tǒng)分析</b></p><p><b>  2.1 基礎(chǔ)知識</b></p><p><b>  2.1.1 素數(shù)</b></p><p>  稱整數(shù)p(p>1)是素數(shù),如果p的因子只有±

13、;1,±p。</p><p>  稱c是兩個整數(shù)a、b的最大公因子,如果</p><p>  ① c是a的因子也是b 的因子,即c是a、b的公因子。</p><p> ?、?a和b的任一公因子,也是c的因子。</p><p>  表示為c=gcd(a, b)。</p><p>  由于要求最大公因子為正,所以

14、gcd(a,b)=gcd(a,-b)=gcd(-a,b)=gcd(-a,-b)。一般gcd(a,b)=gcd(|a|,|b|)。由任一非0整數(shù)能整除0,可得gcd(a,0)=|a|。如果將a,b都表示為素數(shù)的乘積,則gcd(a, b)極易確定。</p><p>  一般由c=gcd(a,b)可得: 對每一素數(shù)p,cp=min(ap,bp)。</p><p>  由于確定大數(shù)的素因子不很容易

15、,所以這種方法不能直接用于求兩個大數(shù)的最大公因子,如何求兩個大數(shù)的最大公因子在下面介紹。</p><p>  如果gcd(a,b)=1,則稱a和b互素。</p><p><b>  2.1.2 模運算</b></p><p>  設(shè)n是一正整數(shù),a是整數(shù),如果用n除a,得商為q,余數(shù)為r,則</p><p>  a=qn

16、+r,0≤r<n, </p><p>  其中x為小于或等于x的最大整數(shù)。</p><p>  用a mod n表示余數(shù)r</p><p>  如果(a mod n)=(b mod n),則稱兩整數(shù)a和b模n同余,記為a≡b mod n。稱與a模n同余的數(shù)的全體為a的同余類,記為[a],稱a為這個同余類的表示元素。</p>&l

17、t;p>  2.2.3 歐拉函數(shù)和歐拉定理</p><p>  歐拉函數(shù):設(shè)n是一正整數(shù),小于n且與n互素的正整數(shù)的個數(shù)稱為n的歐拉函數(shù),記為φ(n)。若n是素數(shù),則顯然有φ(n)=n-1。若n是兩個素數(shù)p和q的乘積,則φ(n)=φ(p)×φ(q)=(p-1)×(q-1)。</p><p>  歐拉定理:若a和n互素,則aφ(n)≡1 mod n。</p

18、><p>  2.1.4 歐幾里德算法</p><p>  歐幾里得(Euclid)算法是數(shù)論中的一個基本技術(shù),是求兩個正整數(shù)的最大公因子的簡化過程。而推廣的Euclid算法不僅可求兩個正整數(shù)的最大公因子,而且當(dāng)兩個正整數(shù)互素時,還可求出其中一個數(shù)關(guān)于另一個數(shù)的乘法逆元。</p><p>  1. 求最大公因子:Euclid算法是基于下面一個基本結(jié)論: </p&

19、gt;<p>  對任意非負(fù)整數(shù)a和正整數(shù)b,有g(shù)cd(a, b)=gcd(b, a mod b)。</p><p><b>  2. 求乘法逆元:</b></p><p>  如果gcd(a, b)=1 ,則b在mod a下有乘法逆元(不妨設(shè)b<a),即存在一x (x<a),使得bx≡1 mod a。</p><p>

20、;  2.1.5 RSA算法中的計算問題</p><p>  1. RSA的加密與解密過程</p><p>  RSA的加密、解密過程都為求一個整數(shù)的整數(shù)次冪,再取模。如果按其含義直接計算,則中間結(jié)果非常大,有可能超出計算機所允許的整數(shù)取值范圍。如上例中解密運算6677 mod 119,先求6677再取模,則中間結(jié)果就已遠(yuǎn)遠(yuǎn)超出了計算機允許的整數(shù)取值范圍。而用模運算的性質(zhì):</p&g

21、t;<p>  (a×b) mod n=[(a mod n)×(b mod n)] mod n</p><p>  就可減小中間結(jié)果再者,考慮如何提高加、解密運算中指數(shù)運算的有效性。例如求x16,直接計算的話需做15次乘法。然而如果重復(fù)對每個部分結(jié)果做平方運算即求x,x2,x4,x8,x16則只需4次乘法。</p><p>  2. RSA密鑰的產(chǎn)生<

22、;/p><p>  產(chǎn)生密鑰時,需要考慮兩個大素數(shù)p、q的選取,以及e的選取和d的計算。</p><p>  因為n=pq在體制中是公開的,因此為了防止敵手通過窮搜索發(fā)現(xiàn)p、q,這兩個素數(shù)應(yīng)是在一個足夠大的整數(shù)集合中選取的大數(shù)。如果選取p和q為10100左右的大素數(shù),那么n的階為10200,每個明文分組可以含有664位(10200≈2664),即83個8比特字節(jié),這比DES的數(shù)據(jù)分組(8個8比

23、特字節(jié))大得多,這時就能看出RSA算法的優(yōu)越性了。因此如何有效地尋找大素數(shù)是第一個需要解決的問題。尋找大素數(shù)時一般是先隨機選取一個大的奇數(shù)(例如用偽隨機數(shù)產(chǎn)生器),然后用素性檢驗算法檢驗這一奇數(shù)是否為素數(shù),如果不是則選取另一大奇數(shù),重復(fù)這一過程,直到找到素數(shù)為止。素性檢驗算法通常都是概率性的,但如果算法被多次重復(fù)執(zhí)行,每次執(zhí)行時輸入不同的參數(shù),算法的檢驗結(jié)果都認(rèn)為被檢驗的數(shù)是素數(shù),那么就可以比較有把握地認(rèn)為被檢驗的數(shù)是素數(shù)。</p

24、><p>  2.1.6公鑰密碼體制的基本概念</p><p>  在公鑰密碼體制以前的整個密碼學(xué)史中,所有的密碼算法,包括原始手工計算的、由機械設(shè)備實現(xiàn)的以及由計算機實現(xiàn)的,都是基于代換和置換這兩個基本工具。而公鑰密碼體制則為密碼學(xué)的發(fā)展提供了新的理論和技術(shù)基礎(chǔ),一方面公鑰密碼算法的基本工具不再是代換和置換,而是數(shù)學(xué)函數(shù);另一方面公鑰密碼算法是以非對稱的形式使用兩個密鑰,兩個密鑰的使用對保密

25、性、密鑰分配、認(rèn)證等都有著深刻的意義??梢哉f公鑰密碼體制的出現(xiàn)在密碼學(xué)史上是一個最大的而且是惟一真正的革命。公鑰密碼體制的概念是在解決單鑰密碼體制中最難解決的兩個問題時提出的,這兩個問題是密鑰分配和數(shù)字簽字。單鑰密碼體制在進(jìn)行密鑰分配時(看第5章),要求通信雙方或者已經(jīng)有一個共享的密鑰,或者可籍助于一個密鑰分配中心。對第一個要求,常??捎萌斯し绞絺魉碗p方最初共享的密鑰,這種方法成本很高,而且還完全依賴信使的可靠性。第二個要求則完全依賴于

26、密鑰分配中心的可靠性。第二個問題數(shù)字簽字考慮的是如何為數(shù)字化的消息或文件提供一種類似于為書面文件手書簽字的方法。1976年W.Diffie和M.Hellman對解決上述兩個問題有了突破,從而提出了公鑰密碼體制。</p><p><b>  2.2 總體方案</b></p><p>  要實現(xiàn)生成公鑰和密鑰的功能,必須先生成兩個大素數(shù)。方法是先設(shè)定隨機種子為系統(tǒng)當(dāng)前時

27、間,然后隨即生成兩個100以內(nèi)的隨機數(shù),并判斷其是否為素數(shù),取出這兩個素數(shù)。然后通過調(diào)用函數(shù)生成公鑰對和密鑰對,同時顯示出結(jié)果到屏幕上。隨后可以用公鑰對明文進(jìn)行加密,將加密后的秘聞顯示出來。然后可以演示用密鑰對密文進(jìn)行解密,并將結(jié)果顯示到屏幕上。</p><p><b>  2.3 功能模塊</b></p><p>  本系統(tǒng)含有兩個功能模塊:</p>

28、<p> ?。?)公鑰和密鑰生成模塊:可以生成個100以內(nèi)的素數(shù)p和q,以及n、e、d;</p><p> ?。?)加密和解密模塊:可以顯示加密后的數(shù)據(jù),點擊解密可顯示解密后數(shù)據(jù)。</p><p>  系統(tǒng)功能界面圖如下:</p><p>  圖2-1 系統(tǒng)功能界面圖</p><p><b>  3 系統(tǒng)設(shè)計</

29、b></p><p><b>  3.1 算法描述</b></p><p><b>  RSA算法描述:</b></p><p><b>  (1) 密鑰的產(chǎn)生</b></p><p> ?、?選兩個保密的大素數(shù)p和q。</p><p> ?、?

30、計算n=p×q,φ(n)=(p-1)(q-1),其中φ(n)是n的歐拉函數(shù)值。</p><p>  ③ 選一整數(shù)e,滿足1<e<φ(n),且gcd(φ(n),e)=1。</p><p> ?、?計算d,滿足d·e≡1 mod φ(n),即d是e在模φ(n)下的乘法逆元,因e與φ(n)互素,由模運算可知,它的乘法逆元一定存在。</p><p

31、> ?、?以{e,n}為公開鑰,{d,n}為秘密鑰。</p><p><b>  (2) 加密</b></p><p>  加密時首先將明文比特串分組,使得每個分組對應(yīng)的十進(jìn)制數(shù)小于n,即分組長度小于log2n。然后對每個明文分組m,作加密運算: c≡me mod n</p><p><b>  (3) 解密</b>

32、</p><p>  對密文分組的解密運算為: </p><p>  m≡cd mod n</p><p>  下面證明RSA算法中解密過程的正確性。</p><p>  證明: 由加密過程知c≡me mod n,所以</p><p>  cd mod n≡med mod n≡m1 mod φ(n) mod n≡mkφ

33、(n)+1 mod n</p><p>  要獲得兩個隨機的小于100的素數(shù),可以首先將系統(tǒng)當(dāng)前時間設(shè)置為隨機數(shù)種子,然后對生成的隨機數(shù)取100模,然后調(diào)用判斷素數(shù)的函數(shù)。要判斷一個屬實否為素數(shù),可以判斷數(shù)n從2到n的開方,是否能整除n。偽代碼如下:</p><p>  for(i從 2 到 n的開方 ; i++)</p><p><b>  {</

34、b></p><p><b>  if(n被i整除)</b></p><p>  則n不是素數(shù)終止循環(huán);</p><p>  if(i > n的開方 )</p><p><b>  返回n為宿舍;</b></p><p><b>  }</b>

35、;</p><p>  求最大公因子的算法:Euclid算法就是用這種方法,因gcd(a, b)=gcd(|a|, |b|),因此可假定算法的輸入是兩個正整數(shù),設(shè)為d,f,并設(shè)f >d。</p><p>  Euclid(f, d)</p><p>  ①X←f; Y←d;</p><p>  ② if Y=0 then return

36、X=gcd(f,d);</p><p> ?、?R=X mod Y;</p><p><b> ?、?X=Y;</b></p><p><b> ?、?Y=R;</b></p><p><b> ?、?goto ②。</b></p><p>  求乘法逆

37、元:推廣的Euclid算法先求出gcd(a, b),當(dāng)gcd(a, b)=1時,則返回b的逆元。</p><p>  Extended Euclid(f, d) (設(shè) f >d) </p><p> ?、?(X1,X2,X3)←(1,0,f);(Y1,Y2,Y3)←(0,1,d);</p><p> ?、?if Y3=0 then return X3=gcd

38、(f, d);no inverse;</p><p> ?、?if Y3=1 then return Y3=gcd(f, d);Y2=d-1 mod f;</p><p> ?、?Q=X3Y3 ;</p><p>  ⑤ (T1,T2,T3)←(X1-QY1,X2-QY2,X3-QY3);</p><p> ?、?(X1,X2,X3)←(

39、Y1,Y2,Y3);</p><p> ?、?(Y1,Y2,Y3)←(T1,T2,T3);</p><p><b>  ⑧ goto ②。</b></p><p>  處理明文:將明文的每個字符提取出來將其裝換為數(shù)字。進(jìn)行加密處理,將處理后的數(shù)字字符用“+”號相連。其中加密的算法為:求am可如下進(jìn)行,其中a,m是正整數(shù): </p>

40、<p>  將m表示為二進(jìn)制形式bk bk-1…b0,即</p><p>  m=bk2k+bk-12k-1+…+b12+b0</p><p><b>  因此:</b></p><p>  例如:19=1×24+0×23+0×22+1×21+1×20,所以</p>&

41、lt;p>  a19=((((a1)2a0)2a0)2a1)2a1</p><p>  從而可得以下快速指數(shù)算法:</p><p><b>  c=0; d=1;</b></p><p>  For i=k downto 0 d0 {</p><p><b>  c=2×c;</b>

42、;</p><p>  d=(d×d) mod n;</p><p>  if bi=1 then {</p><p><b>  c=c+1;</b></p><p>  d=(d×a) mod n</p><p><b>  }</b></p&

43、gt;<p><b>  }</b></p><p><b>  return d.</b></p><p>  其中d是中間結(jié)果,d的終值即為所求結(jié)果。c在這里的作用是表示指數(shù)的部分結(jié)果,其終值即為指數(shù)m,c對計算結(jié)果無任何貢獻(xiàn),算法中完全可將之去掉。</p><p>  解密過程:將“+”連接的數(shù)字字符轉(zhuǎn)

44、換為數(shù)字并相加,用密鑰做與加密相同的算法,即可得出明文。</p><p><b>  3.2 流程圖</b></p><p>  圖3-1 生成公鑰和私鑰流程圖 </p><p>  圖3-2 明文加密流程圖</p><p>  圖3-3 密文解密流程圖</p><p><b>  4

45、 代碼編寫</b></p><p>  在RSADlg.h中聲明成員變量:</p><p><b>  intm_p;</b></p><p><b>  intm_q;</b></p><p><b>  intm_n;</b></p>

46、<p>  intm_code;</p><p>  intm_decode;</p><p>  CStringm_dtxt;</p><p>  CStringm_etxt;</p><p>  CStringm_ptxt;</p><p>  1.產(chǎn)生公鑰和密鑰:</p>

47、<p>  void CRSADlg::OnButtonProduce() //產(chǎn)生公鑰和密鑰函數(shù)</p><p><b>  {</b></p><p>  UpdateData(true);</p><p>  while(true)</p><p><b>  {</b></

48、p><p>  srand(time(0));</p><p>  m_p = rand() % 100;</p><p>  m_q = rand() % 100;</p><p>  if (isPrime(m_p) && isPrime(m_q))</p><p><b>  break;&

49、lt;/b></p><p><b>  }</b></p><p>  m_n = m_p * m_q;</p><p>  int fiN = (m_p - 1) * (m_q - 1);</p><p><b>  //int e;</b></p><p>  f

50、or (int i = 3; i < fiN; i++)</p><p><b>  {</b></p><p>  if (isPrime(i) && gcd(fiN, i) == 1)</p><p><b>  {</b></p><p>  m_code = i;<

51、;/p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  Euler(m_code, fiN);</p><p>  UpdateData(false);</p

52、><p><b>  }</b></p><p>  代碼分析:首先設(shè)置系統(tǒng)的當(dāng)前時間為隨機種子,循環(huán)找出p和q并且調(diào)用判斷素數(shù)的函數(shù)isPrime(int)使p,q都為小于100的素數(shù),然后fiN = (m_p - 1) * (m_q - 1)產(chǎn)生fiN,產(chǎn)生m_n = m_p * m_q,通過調(diào)用gcd(fiN, i)找出與fiN互素的數(shù)m_code,調(diào)用uler(m

53、_code, fiN)找出m_decode,最后UpdateData(false)刷新文本框顯示出結(jié)果。</p><p><b>  2.加密明文:</b></p><p>  void CRSADlg::OnCode() //加密函數(shù)</p><p><b>  {</b></p><p> 

54、 CString temp;</p><p>  UpdateData(true);</p><p>  CString encSt = "";</p><p>  CString e2st = "";</p><p>  if (m_ptxt.IsEmpty())</p><p&g

55、t;<b>  return;</b></p><p>  for (int i = 0; i < m_ptxt.GetLength(); i++)</p><p><b>  {</b></p><p>  temp = encSt;</p><p>  encSt.Format("

56、;%s%d%s",temp,power((int)m_ptxt.GetAt(i), m_code, m_n),"+");</p><p><b>  }</b></p><p>  m_etxt = encSt;</p><p>  UpdateData(false);</p><p>&l

57、t;b>  }</b></p><p>  代碼分析:首先判斷明文文本框是否為空,若為空則返回。取出明文的每個字符,將其裝換為數(shù)字,通過加密函數(shù)power轉(zhuǎn)換后,生成的數(shù)字字符用“+”號相連,即為密文。調(diào)用UpdateData(false)刷新文本框,顯示加密后的結(jié)果。</p><p><b>  3.解密密文</b></p><

58、p>  void CRSADlg::OnDecode() // 解密函數(shù)</p><p><b>  {</b></p><p><b>  int ptr;</b></p><p><b>  int tok;</b></p><p>  CString temp

59、= "";</p><p>  UpdateData(true);</p><p>  CString DecSt = "";</p><p>  //int t = m_etxt.GetLength();</p><p>  for (int i = 0; i < m_etxt.GetLeng

60、th();)</p><p><b>  {</b></p><p>  ptr = m_etxt.Find("+", i);</p><p>  tok = atoi(m_etxt.Mid(i, ptr - i));</p><p>  temp = DecSt;</p><p&

61、gt;  DecSt.Format("%s%c", temp, char(power(tok, m_decode, m_n)));</p><p>  i = i + num(tok) + 1;</p><p><b>  }</b></p><p>  m_dtxt = DecSt;</p><p>

62、;  UpdateData(false);</p><p><b>  }</b></p><p>  代碼分析:計算出密文字符串的長度,循環(huán)尋找以字符“+”分隔得數(shù)字字符串,并將其轉(zhuǎn)換問數(shù)字,然后調(diào)用power函數(shù)處理,將得出的數(shù)字轉(zhuǎn)換為字符,將得出的字符連接起來就解密出了明文,最后調(diào)用UpdateData(false)刷新文本框,顯示出解密出的結(jié)果。</p&

63、gt;<p><b>  4.其他函數(shù):</b></p><p>  int CRSADlg::power(int a, int n, int m) //求出a的n次方模m的值</p><p><b>  {</b></p><p>  int z=1, t;</p><p>  fo

64、r(t=a; n>0; n>>=1)</p><p><b>  { </b></p><p>  if (n%2==1) z=(z*t) % m;</p><p>  t=(t*t) % m;</p><p><b>  }</b></p><p>  r

65、eturn(z);</p><p><b>  }</b></p><p>  BOOL CRSADlg::isPrime(int x) //判斷整數(shù)i是否為素數(shù)</p><p><b>  {</b></p><p><b>  int i;</b></p>

66、<p>  for (i = 2; i <= (int)sqrt(x); i++)</p><p><b>  {</b></p><p>  if (x % i == 0)</p><p><b>  break;</b></p><p><b>  }</b&g

67、t;</p><p>  if (i > (int)sqrt(x))</p><p>  return true;</p><p>  return false;</p><p><b>  }</b></p><p>  int CRSADlg::gcd(int a, int b) //

68、求出a與b的公因子</p><p><b>  {</b></p><p>  if (a == 0)</p><p><b>  {</b></p><p><b>  return b;</b></p><p><b>  }</b&

69、gt;</p><p><b>  else</b></p><p><b>  {</b></p><p>  return gcd(b % a, a);</p><p><b>  }</b></p><p><b>  }</b&g

70、t;</p><p>  void CRSADlg::Euler(int e, int fin) //求出e相對模fin的乘法逆元</p><p><b>  {</b></p><p>  int u1 = 1;</p><p>  int u2 = 0;</p><p>  int u3 =

71、 fin;</p><p>  int v1 = 0;</p><p>  int v2 = 1;</p><p>  int v3 = e;</p><p>  int v = 1;</p><p>  int t1, t2, t3;</p><p><b>  int q;<

72、/b></p><p>  int uu, vv;</p><p>  int inverse, z;</p><p>  while (v3 != 0)</p><p><b>  {</b></p><p>  q = (int)(u3 /v3);</p><p>

73、;  t1 = u1 - q * v1;</p><p>  t2 = u2 - q * v2;</p><p>  t3 = u3 - q * v3;</p><p><b>  u1 = v1;</b></p><p><b>  u2 = v2;</b></p><p>

74、;<b>  u3 = v3;</b></p><p><b>  v1 = t1;</b></p><p><b>  v2 = t2;</b></p><p><b>  v3 = t3;</b></p><p><b>  z = 1;&

75、lt;/b></p><p><b>  }</b></p><p><b>  uu = u1;</b></p><p><b>  vv = u2;</b></p><p>  if (vv < 0)</p><p>  inverse

76、= vv + fin;</p><p><b>  else</b></p><p>  inverse = vv;</p><p>  m_decode = inverse;</p><p><b>  }</b></p><p><b>  5 運行與測試&l

77、t;/b></p><p>  5.1 產(chǎn)生公鑰和密鑰</p><p>  點擊密鑰生成,運行效果如下圖:</p><p>  圖5-1 產(chǎn)生公鑰和密鑰效果圖</p><p>  5.2 加密與解密</p><p>  1.點擊加密,運行效果如下圖:</p><p>  圖5-2 加密

78、效果圖</p><p>  2.點擊解密,運行效果如下圖:</p><p>  圖5-3 解密效果圖</p><p><b>  總 結(jié)</b></p><p>  通過這次課程設(shè)計,我對RSA加密體制有了更進(jìn)一步的了解。遇到的主要問題是如何將明文按照比特分組并對其實現(xiàn)RSA加密,以及對大素數(shù)的處理。最終大素數(shù)的處理得以

79、實現(xiàn),但明文分組并沒有找到合適的方法,這就要求我在課程設(shè)計后去學(xué)習(xí)怎樣為明文分組機密。要想學(xué)好現(xiàn)代密碼學(xué)不僅要學(xué)習(xí)好密碼學(xué)相關(guān)知識,還要有很好的數(shù)學(xué)基礎(chǔ),還有很強的編程能力,這個課程設(shè)計是用Microsoft Visual C++ 6.0的開發(fā)環(huán)境寫的,這對編程要求很高,不僅要會密碼學(xué)中RSA的加密機制,算法還要熟知VC++的編程方法,要對微軟的MFC的基本編程方法要熟悉。課程設(shè)計時對學(xué)生個人綜合能力的檢驗。任何知識和技術(shù)都不是孤立的。

80、要學(xué)習(xí)好密碼學(xué)要牽扯到線性代數(shù),離散數(shù)學(xué),概率統(tǒng)計等數(shù)學(xué)知識,為了驗證加密解密算法的正確性,還要動手編制程序,這就要求學(xué)生要對至少一種編程技術(shù)有所熟知。對RSA加密體制還可以運用到手機等終端設(shè)備的加密,也可嵌入到其他小型化的設(shè)備中去,下一步我們講進(jìn)一步對這些方向進(jìn)行研究。</p><p><b>  致 謝</b></p><p>  感謝老師給了這次機會給我們做這次

81、課程設(shè)計,讓我們能夠把平時所學(xué)的東西用上,不至于讓我們覺得平時學(xué)的東西沒什么用,在這短短的時間里完成了本次課程設(shè)計,要感謝朋友們的幫忙,在我困惑的時候要不是你們,我可能早就放棄了,因為你們的幫忙,我才能順利的完成這次系統(tǒng)。其實最辛苦的還是老師,請允許我向你們說聲謝謝,感謝你們對我們的教誨。</p><p>  在這次課程設(shè)計的過程中,我覺得我真的是獲得了很多的東西,不僅僅是動手能力及編程能力得到了很大的提高,也不

82、僅僅是在修改程序錯誤方面,主要是在程序編寫過程中獲得了大量的寶貴的經(jīng)驗。此外,在這次實踐過程中發(fā)現(xiàn)數(shù)據(jù)庫是一門十分實用的課程,也體會到學(xué)好數(shù)據(jù)庫對我們以后的學(xué)習(xí),工作是十分重要的。因而在此,我要感謝那些在實踐過程中給過我?guī)椭凸膭畹娜恕?lt;/p><p>  最后對所有在課程設(shè)計中幫助過我的老師和同學(xué)說一聲謝謝。</p><p><b>  參考文獻(xiàn)</b></p

83、><p>  1 楊波.現(xiàn)代密碼學(xué).第2版.北京:清華大學(xué)出版社,2008</p><p>  2 谷利澤,鄭世慧,楊義先.現(xiàn)代密碼學(xué)教程.北京:北京郵電大學(xué)出版社,2009</p><p>  3丁存生,肖國鎮(zhèn).流密碼學(xué)及其應(yīng)用. 北京:國防工業(yè)出版社,1994</p><p>  4馮登國,吳文玲.分組密碼的設(shè)計與分析. 北京:清華大學(xué)出版社

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論