實(shí)現(xiàn)數(shù)字簽名的RSA算法的設(shè)計(jì)與實(shí)現(xiàn)樣本_第1頁
實(shí)現(xiàn)數(shù)字簽名的RSA算法的設(shè)計(jì)與實(shí)現(xiàn)樣本_第2頁
實(shí)現(xiàn)數(shù)字簽名的RSA算法的設(shè)計(jì)與實(shí)現(xiàn)樣本_第3頁
實(shí)現(xiàn)數(shù)字簽名的RSA算法的設(shè)計(jì)與實(shí)現(xiàn)樣本_第4頁
實(shí)現(xiàn)數(shù)字簽名的RSA算法的設(shè)計(jì)與實(shí)現(xiàn)樣本_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

課程實(shí)踐報(bào)告書課程名稱:密碼學(xué)與網(wǎng)絡(luò)安全課程實(shí)踐題目:實(shí)現(xiàn)數(shù)字簽名RSA算法設(shè)計(jì)與實(shí)現(xiàn)學(xué)生姓名:專業(yè):班別:學(xué)號(hào):指引教師:日期:年6月18日實(shí)現(xiàn)數(shù)字簽名RSA算法設(shè)計(jì)與實(shí)現(xiàn)摘要隨著計(jì)算機(jī)網(wǎng)絡(luò)和信息技術(shù)發(fā)展,信息安全在各領(lǐng)域發(fā)揮著越來越重要作用,其中密碼學(xué)已成為信息安全技術(shù)核心,本文重要簡介了信息加密技術(shù)應(yīng)用。RSA算法是當(dāng)前公認(rèn)在理論和實(shí)際應(yīng)用中最為成熟和完善一種公鑰密碼體制,它是第一種既能用于數(shù)據(jù)加密也能用于數(shù)字簽名算法,是公鑰密碼體制代表。數(shù)字簽名是起到身份認(rèn)證、核準(zhǔn)數(shù)據(jù)完整性一種信息安全技術(shù)。它通過認(rèn)證技術(shù)來辨認(rèn)真?zhèn)?。RSA數(shù)字簽名體制使用是RSA公開密鑰密碼算法進(jìn)行數(shù)字簽名。本文重要內(nèi)容涉及:第一,對(duì)RSA算法進(jìn)行系統(tǒng)簡介;第二,簡介RSA數(shù)字簽名某些基本概念和數(shù)字簽名理論實(shí)現(xiàn)過程;第三詳述RSA數(shù)字簽名設(shè)計(jì)與實(shí)現(xiàn),重要實(shí)現(xiàn)模塊涉及RSA密鑰產(chǎn)生(一對(duì)公鑰和私鑰),RSA加密算法和解密算法實(shí)現(xiàn),;第四,對(duì)該系統(tǒng)進(jìn)行了整體測(cè)試和分析改進(jìn)。核心字:RSA算法;加密;解密;RSA數(shù)字簽名目錄284451引言 3151161.1課題研究背景 342541.2課題研究意義 3241882RSA算法和RSA數(shù)字簽名算法概念設(shè)計(jì) 3228082.1RSA算法概念和原理 332812.1.1RSA算法簡介 3221252.1.2RSA算法實(shí)現(xiàn)原理 374062.2RSA數(shù)字簽名基本概念和RSA數(shù)字簽名算法實(shí)現(xiàn)原理 4108432.2.1RSA數(shù)字簽名基本概念 4159942.2.2RSA數(shù)字簽名算法實(shí)現(xiàn)原理 5285063RSA數(shù)字簽名邏輯設(shè)計(jì)與實(shí)現(xiàn) 6280793.1RSA數(shù)字簽名總體設(shè)計(jì) 6301463.1.1RSA數(shù)字簽名所需實(shí)現(xiàn)功能 6293173.1.2總體規(guī)定和設(shè)計(jì) 688913.2各某些設(shè)計(jì)實(shí)現(xiàn) 7118493.2.1密鑰產(chǎn)生實(shí)現(xiàn) 7184333.2.2產(chǎn)生消息摘要設(shè)計(jì)實(shí)現(xiàn) 10212193.2.3數(shù)字簽名設(shè)計(jì)實(shí)現(xiàn) 12170353.2.4驗(yàn)證數(shù)字簽名設(shè)計(jì)與實(shí)現(xiàn) 15146823.2.5RSA數(shù)字簽名運(yùn)營成果 18244594軟件整體測(cè)試和分析改進(jìn) 18310544.1軟件整體測(cè)試 18170044.2性能分析與改進(jìn)設(shè)想 1912684開發(fā)體會(huì) 197091參照文獻(xiàn) 201引言1.1課題研究背景隨著電子信息技術(shù)迅速發(fā)展,人類已步入信息社會(huì)。但是由于整個(gè)社會(huì)形成了一種巨大計(jì)算機(jī)網(wǎng)絡(luò),任何一種計(jì)算機(jī)網(wǎng)絡(luò)浮現(xiàn)安全問題,都會(huì)影響整個(gè)國家網(wǎng)絡(luò)安全,因此信息安全、計(jì)算機(jī)網(wǎng)絡(luò)安全問題已引起了人類高度注重。網(wǎng)絡(luò)安全辦法應(yīng)是能全方位地針對(duì)各種不同威脅和脆弱性,這樣才干保證網(wǎng)絡(luò)信息保密性、完整性和可用性。當(dāng)代密碼學(xué)已成為信息安全技術(shù)核心,密碼學(xué)是以研究通信安全保密學(xué)科,即研究對(duì)傳播信息采用何種秘密變換以防止第三者對(duì)信息竊取。RSA公鑰加密算法是第一種既能用于數(shù)據(jù)加密也能用于數(shù)字簽名算法。它易于理解和操作,也十分流行。隨著越來越多商業(yè)應(yīng)用和原則化工作,RSA已經(jīng)成為最具代表性公鑰加密技術(shù)。現(xiàn)今,網(wǎng)上交易加密連接、網(wǎng)上銀行身份驗(yàn)證、各種信用卡使用數(shù)字證書、智能移動(dòng)電話和存儲(chǔ)卡驗(yàn)證功能芯片等,大多數(shù)使用RSA技術(shù)。1.2課題研究意義隨著電子商務(wù)發(fā)展,網(wǎng)絡(luò)上資金電子互換日益頻繁,如何防止信息偽造和欺騙成為非常重要問題。當(dāng)前關(guān)于數(shù)字簽名研究重要集中點(diǎn)是基于公鑰密碼體制數(shù)字簽名。手寫簽名每一項(xiàng)業(yè)務(wù)都是數(shù)字簽名潛在用場(chǎng)。數(shù)字簽名可以提供數(shù)據(jù)完整性、真實(shí)性和不可否認(rèn)性。數(shù)字簽名技術(shù)在身份辨認(rèn)和認(rèn)證、數(shù)據(jù)完整性、抵賴等方面具備其他技術(shù)無法代替作用,它在軍事、電子商務(wù)和電子政務(wù)等領(lǐng)域有著極廣泛應(yīng)用。而在公鑰體制中,RSA是一種較為完善公鑰密碼算法,不但可以同步用于加密和數(shù)字簽名,并且易于理解和操作,是被廣泛研究公鑰密碼算法。因而,基于RSA數(shù)字簽名具備較強(qiáng)研究性和實(shí)際應(yīng)用意義。2RSA算法和RSA數(shù)字簽名算法概念設(shè)計(jì)2.1RSA算法概念和原理2.1.1RSA算法簡介RSA算法是一種公鑰密碼算法,實(shí)現(xiàn)RSA算法涉及生成RSA密鑰,加密和解密數(shù)據(jù)。RSA算法是第一種能同步用于加密和數(shù)字簽名算法,也易于理解和操作。RSA是被研究得最廣泛公鑰算法。RSA缺陷重要有:A)產(chǎn)生密鑰很麻煩,受到素?cái)?shù)產(chǎn)生技術(shù)限制,因而難以做到一次一密。B)分組長度太大,為保證安全性,n至少也要600bits。2.1.2RSA算法實(shí)現(xiàn)原理1)隨機(jī)選取兩個(gè)不同素?cái)?shù)p和q,它們寬度是密鑰寬度一半。2)計(jì)算出p和q乘積n。3)在2和Φ(n)之間隨機(jī)選取一種數(shù)e,e必要和Φ(n)互素,整數(shù)e用做加密密鑰(其中Φ(n)=(p-1)*(q-1))。4)從公式ed≡1modΦ(n)中求出解密密鑰d。5)得公鑰(e,n),私鑰(d,n)。6)公開公鑰,但不公開私鑰。7)將明文P(假設(shè)P是一種不大于n整數(shù))加密為密文C,計(jì)算辦法為:C=P^emodn;8)將密文C解密為明文P,計(jì)算辦法為:P=C^dmodn;然而只依照n和e(不是p和q)要計(jì)算出d是不也許。因而,任何人都可對(duì)明文進(jìn)行加密,但只有授權(quán)顧客(懂得d)才可對(duì)密文解密。2.2RSA數(shù)字簽名基本概念和RSA數(shù)字簽名算法實(shí)現(xiàn)原理2.2.1RSA數(shù)字簽名基本概念RSA數(shù)字簽名體制使用了RSA公開密鑰密碼算法進(jìn)行數(shù)字簽名,鑒于RSA算法在實(shí)踐中已經(jīng)被證明了安全性,RSA數(shù)字簽名體制在許多安全原則中得以廣泛應(yīng)用。ISO/IEC9796和ANSIX9.30-199X以及美國聯(lián)邦信息解決原則FIPS186-2已經(jīng)將RSA作為推薦數(shù)字簽名原則算法之一。RSA數(shù)字簽名算法,涉及簽名算法和驗(yàn)證簽名算法。它是運(yùn)用RSA算法加密和解密算法原理進(jìn)行一種數(shù)字簽名,事實(shí)上是通過一種哈希函數(shù)來實(shí)現(xiàn)(本設(shè)計(jì)是通過MD5算法)產(chǎn)生消息摘要MD來實(shí)現(xiàn)所需加密對(duì)象。數(shù)字簽名特點(diǎn)是它代表了消息特性,消息如果發(fā)生變化,數(shù)字簽名值也將發(fā)生變化,不同消息將得到不同數(shù)字簽名。安全數(shù)字簽名使接受方可以得到保證:消息的確來自發(fā)送方。由于簽名私鑰只有發(fā)送方自己保存,她人無法做同樣數(shù)字簽名,如果第三方冒充發(fā)送方發(fā)出一種消息,而接受方在對(duì)數(shù)字簽名進(jìn)行解密時(shí)使用是發(fā)送方公開密鑰,只要第三方不懂得發(fā)送方私有密鑰,加密出來數(shù)字簽名和通過計(jì)算數(shù)字簽名必然是不相似,這就提供了一種安全確認(rèn)發(fā)送方身份辦法,即數(shù)字簽名真實(shí)性得到了保證。數(shù)字簽名類似手書簽名,它具備如下性質(zhì):1)可以驗(yàn)證簽名產(chǎn)生者身份,以及產(chǎn)生簽名日期和時(shí)間;2)能用于證明被簽消息內(nèi)容;3)數(shù)字簽名可由第三方驗(yàn)證,從而可以解決通信雙方爭議。為了滿足數(shù)字簽名這些規(guī)定,例如,通信雙方在發(fā)送消息時(shí),既要防止接受方或其她第三方偽造,又要防止發(fā)送方因?qū)ψ约翰焕裾J(rèn),也就是說,為了保證數(shù)字簽名真實(shí)性。數(shù)字簽名原理是:(發(fā)送方和接受方依照規(guī)定各自產(chǎn)生自己一對(duì)公鑰和私鑰)1)被發(fā)送文獻(xiàn)采用某種算法對(duì)原始消息進(jìn)行運(yùn)算,得到一種固定長度數(shù)字串,稱為消息摘要(MD),不同消息得到消息摘要各異,但是對(duì)相似消息它消息摘要卻是唯一;2)發(fā)送方生成消息消息摘要,用自己私鑰對(duì)摘要進(jìn)行加密來形成發(fā)送方數(shù)字簽名;3)這個(gè)數(shù)字簽名將作為消息附件和消息一同用接受方公鑰進(jìn)行加密,將加密后密文一起發(fā)送給接受方;4)接受方一方面把接受到密文用自己私鑰解密,得到原始消息和數(shù)字簽名,再用發(fā)送方公鑰解密數(shù)字簽名,隨后用同樣算法計(jì)算出消息摘要;5)如果計(jì)算出來消息摘要和發(fā)送方發(fā)送給她消息摘要(通過解密數(shù)字簽名得到)是相似,這樣接受方就能確認(rèn)數(shù)字簽名的確是發(fā)送方,否則就以為收到消息是偽造或是半途被篡改。數(shù)字簽名原理圖如2-1所示ABEDEDEDED用A私鑰加密用B公鑰用B私鑰用A公鑰解密數(shù)字簽名加密解密核算簽名圖2-1數(shù)字簽名原理2.2.2RSA數(shù)字簽名算法實(shí)現(xiàn)原理RSA數(shù)字簽名算法分為如下兩個(gè)環(huán)節(jié):1)簽名算法(涉及兩步:消息摘要計(jì)算,RSA加密)(1)消息摘要MD計(jì)算:消息在簽名前一方面通過MD5計(jì)算,生成128位消息摘要;MD5函數(shù)是一種單向散列函數(shù),它將任意長度消息壓縮成128位消息摘要。應(yīng)用MD5單向性(即給定散列值,計(jì)算消息很難)和抗碰撞性(即給定消息M,要找到另一消息M’并滿足兩者散列值很難),可以實(shí)現(xiàn)信息完整性檢查。此外該函數(shù)設(shè)計(jì)不基于任何假設(shè)和密碼體制而直接構(gòu)造,執(zhí)行速度快,是一種被廣泛承認(rèn)單向散列算法。(2)對(duì)MD作RSA加密算法:采用簽名者私鑰加密消息摘要,得到加密后字符串即數(shù)字簽名;2)驗(yàn)證簽名算法(RSA解密、對(duì)消息摘要計(jì)算和比較)驗(yàn)證簽名算法涉及兩步:RSA解密得簽名者消息摘要,驗(yàn)證者對(duì)原消息計(jì)算摘要,比較兩個(gè)消息摘要。驗(yàn)證簽名過程輸入為消息,簽名者公鑰,簽名;輸出為驗(yàn)證成果,即與否是對(duì)的簽名。(1)RSA解密:簽名實(shí)際是加密消息摘要,用以上所述RSA解密辦法采用簽名者公鑰對(duì)這個(gè)加密消息摘要解密,解密成果應(yīng)為128位消息摘要。(2)消息摘要計(jì)算和比較:驗(yàn)證者對(duì)消息用MD5算法重新計(jì)算,得到驗(yàn)證者自己消息摘要。驗(yàn)證者比較解密得到消息摘要和自己消息摘要,如果兩者相似,則驗(yàn)證成功,可以確認(rèn)消息完整性及簽名的確為簽名者;否則,驗(yàn)證失敗,確認(rèn)簽名被冒充或是被篡改。3RSA數(shù)字簽名邏輯設(shè)計(jì)與實(shí)現(xiàn)3.1RSA數(shù)字簽名總體設(shè)計(jì)3.1.1RSA數(shù)字簽名所需實(shí)現(xiàn)功能在本軟件中需要實(shí)現(xiàn)功能有如下幾種:(1)生成RSA密鑰:公鑰ke=(e,n),私鑰kd=(d,n);(2)運(yùn)用MD5算法計(jì)算出消息摘要MD;(3)數(shù)字簽名實(shí)現(xiàn):用私鑰d對(duì)消息摘要進(jìn)行加密計(jì)算(RSA算法中加密辦法);(4)驗(yàn)證數(shù)字簽名:用公鑰e對(duì)數(shù)字簽名進(jìn)行解密計(jì)算(RSA算法中解密辦法),得到解密成果與(2)步計(jì)算出消息摘要比較,如果兩個(gè)消息摘要同樣則簽名成功。3.1.2總體規(guī)定和設(shè)計(jì)本軟件總體規(guī)定有:1)按規(guī)定生成非對(duì)稱密鑰——公鑰和私鑰;2)按任意寫入消息字符串(明文信息)生成所需要消息摘要MD;3)在本設(shè)計(jì)中用產(chǎn)生私鑰d依照RSA算法加密原理對(duì)所生成消息摘要進(jìn)行加密運(yùn)算,得到數(shù)字簽名;4)在本設(shè)計(jì)中用產(chǎn)生公鑰e依照RSA算法解密原理對(duì)所加密消息摘要即數(shù)字簽名進(jìn)行解密運(yùn)算,得到相應(yīng)消息摘要(在本設(shè)計(jì)中標(biāo)示為解密信息),比較兩個(gè)消息摘要,驗(yàn)證數(shù)字簽名者身份真實(shí)與否;5)提示信息完整、操作舒服、圖形界面雅觀。本軟件總體設(shè)計(jì)都是基于C++開發(fā)環(huán)境,采用是MicrosoftVisualc++6.0運(yùn)營環(huán)境。3.2各某些設(shè)計(jì)實(shí)現(xiàn)3.2.1密鑰產(chǎn)生實(shí)現(xiàn)在密鑰產(chǎn)生某些中起決定性作用是素?cái)?shù)選取,

對(duì)隨機(jī)數(shù)作素性檢測(cè),若通過則為素?cái)?shù);否則增長一種步長后再做素性檢測(cè),直到找出素?cái)?shù)。素性檢測(cè)采用Fermat測(cè)試。這個(gè)算法理論根據(jù)是費(fèi)爾馬小定理:如果m是一種素?cái)?shù),且a不是m倍數(shù),那么依照費(fèi)爾馬小定理有:am-1=1(modm)。實(shí)際應(yīng)用時(shí):am-1=1(modm)am=a(modm)a=am(modm),因而對(duì)于整數(shù)m,只需計(jì)算am(modm),再將成果與a比較,如果兩者相似,則m為素?cái)?shù)。選用a=2,則a一定不會(huì)是任何素?cái)?shù)倍數(shù)。依照所選素?cái)?shù)不同產(chǎn)生不同密鑰。密鑰理論產(chǎn)生模塊流程圖如圖3-1所示:產(chǎn)生任意素?cái)?shù)產(chǎn)生任意素?cái)?shù)p和q計(jì)算n=p*q計(jì)算ou_la=(p-1)(q-1)選取e作為公鑰計(jì)算d作為私鑰圖3-1密鑰產(chǎn)生密鑰產(chǎn)生某些代碼實(shí)現(xiàn): CStringstr; //第一步產(chǎn)生任意素?cái)?shù) GeneratePrimeNumbers(); //第二步計(jì)算n=p*q m_n=m_Prime1*m_Prime2; //第三步0=(p-1)(q-1) m_Undef=(m_Prime1-1)*(m_Prime2-1); //第四步選取'e' SelectE(); //第五步計(jì)算D CalculateD(); //顯示公鑰和私鑰 //(1)公鑰KU={e,n} str.Format("{%d,%d}",m_e,m_n); m_public_key.SetWindowText(str); //(2)私鑰KU={d,n} str.Format("{%d,%d}",m_d,m_n); m_private_key.SetWindowText(str); //選取一種'e'使'e'與m_Undef互素//選取e函數(shù)實(shí)現(xiàn)SelectE(){CStringstr;for(floati=2;i<100000;i++) { if(IsRelativePrime((float)m_Undef,(float)i)) { m_e=(long)i; return; } }}//互為素?cái)?shù)函數(shù)實(shí)現(xiàn)IsRelativePrime(floatX,floatY){floatR;//輸入:X,Y if(X<Y)//如果X較小則互換兩個(gè)值 { X=X+Y; Y=X-Y; X=X-Y; } //在這時(shí)X總是比Y大 for(;;) { if(Y==0) break; R=fmod(X,Y); X=Y; Y=R; }if(X!=1) returnfalse; else returntrue;//互素}//計(jì)算D函數(shù)實(shí)現(xiàn)CalculateD(){ floatd; longd_dash; CStringstr; for(floatk=1;k<100000;k++) { d=(m_Undef*k+1)/m_e; d_dash=(long)((m_Undef*k+1)/m_e); if(d==d_dash) { m_d=d; return; } }}//產(chǎn)生素?cái)?shù)函數(shù)實(shí)現(xiàn)GeneratePrimeNumbers(){ CStringstr; UpdateData(TRUE);//通過如下兩個(gè)函數(shù)可獲得兩個(gè)大素?cái)?shù),但增長了計(jì)算復(fù)雜性,為了以便,直接給定素?cái)?shù)// m_Prime1=FindPrime(1);// m_Prime2=FindPrime(m_Prime1); m_Prime1=47; m_Prime2=71;}3.2.2產(chǎn)生消息摘要設(shè)計(jì)實(shí)現(xiàn)計(jì)算消息摘要理論實(shí)現(xiàn)流程圖如圖3-2所示:初始化MD5初始化MD5所需常量計(jì)算所需追加長度對(duì)原始信息進(jìn)行補(bǔ)位將輸入提成512位塊循環(huán)解決塊得到消息摘要得到消息摘要圖3-2消息摘要計(jì)算流程在以上流程圖中其中循環(huán)解決塊是最重要一步,也是MD5核心算法,在這一步中涉及了:(1)把四個(gè)連接變量復(fù)制到了四個(gè)變量a,b,c,d中,使a=A,b=B,c=C,d=D;其中a,b,c,d組合成128位寄存器,且在實(shí)際算法運(yùn)算中保存中間成果和最后成果;(2)將當(dāng)前512位塊分解為16個(gè)子塊,每個(gè)子塊為32位;(3)要循環(huán)四輪,每一輪解決一種塊中16個(gè)子塊,四輪第一步進(jìn)行不同解決,其她相似:每一輪有16個(gè)輸入子塊M[0],M[1],…………..M[15],或表達(dá)為M[i],其中i為0-15;t是常量數(shù)組,包括64個(gè)元素,每個(gè)元素為32位,數(shù)組t表達(dá)為t[1],t[2],………t[64],或t[k],k為1-64;MD5循環(huán)四輪操作過程用下式表達(dá):a=b+((a+proccessP(b,c,d)+M[i]+T[k])<<<s)(<<<s表達(dá)循環(huán)左移s位)產(chǎn)生消息摘要重要代碼如下: inti;intIndex; //初始化MD5所需常量Init(); //計(jì)算追加長度Append(WriteMessage.length());//對(duì)原始信息進(jìn)行補(bǔ)位 for(i=0;i<m_AppendByte;i++) { if(i==0)WriteMessage+=(unsignedchar)0x80; elseWriteMessage+=(unsignedchar)0x0; }//將原始信息長度附加在補(bǔ)位后數(shù)據(jù)背面for(i=0;i<8;i++)WriteMessage+=m_MsgLen[i]; //位塊數(shù)組unsignedcharx[64]={0};//循環(huán),將原始信息以64字節(jié)為一組拆分進(jìn)行解決 for(i=0,Index=-1;i<WriteMessage.length();i++) { x[++Index]=WriteMessage[i]; if(Index==63) { Index=-1;//將64字節(jié)位轉(zhuǎn)換為16個(gè)字節(jié) Transform(x); } }//將寄存器ABCD最后值轉(zhuǎn)換為16進(jìn)制返回給顧客 returnToHex(UpperCase);3.2.3數(shù)字簽名設(shè)計(jì)實(shí)現(xiàn)數(shù)字簽名理論實(shí)現(xiàn)流程圖如圖3-3所示,數(shù)字簽名,就是通過在數(shù)據(jù)單元上附加數(shù)據(jù),或?qū)?shù)據(jù)單元進(jìn)行加密變換,從而使接受者可以確認(rèn)數(shù)據(jù)來源和完整性。數(shù)字簽名是防止她人對(duì)傳播文獻(xiàn)進(jìn)行破壞,以及擬定發(fā)信人身份手段。數(shù)字簽名中加密算法就是應(yīng)用RSA加密原理,而它驗(yàn)證算法則是應(yīng)用RSA解密原理。開始得到數(shù)字簽名開始得到數(shù)字簽名得到消息摘要MD用私鑰d加密MD結(jié)束圖3-3數(shù)字簽名實(shí)現(xiàn)流程RSA加密、解密過程都為求一種整數(shù)整多次冪,再取模。如果按其含義直接計(jì)算,則中間成果非常大,有也許超過計(jì)算機(jī)所容許整數(shù)取值范疇。為了減小中間成果和提高加、解密運(yùn)算中指數(shù)運(yùn)算有效性,本設(shè)計(jì)采用了迅速指數(shù)算法。它運(yùn)算過程為(如果要算a^mmodn):1)將m表達(dá)為二進(jìn)制形式;2)初始化c=0,d=1,c在這里表達(dá)指數(shù)某些成果,它終值即為指數(shù)m,d是中間成果,它終值即為所求成果;3)從二進(jìn)制數(shù)最高位到最低位開始對(duì)每一位都用公式1進(jìn)行運(yùn)算,得到d為該步成果,公式1:c=2*c;d=fmod(d*d,n);4)若二進(jìn)制數(shù)是1,則在上面運(yùn)算后繼續(xù)如下運(yùn)算:c=c+1;d=fmod(d*a,n);得到成果d才為該步最后成果。數(shù)字簽名重要實(shí)現(xiàn)過程代碼如下://消息摘要,8位為一組一種字符一組 charmessage[200];//從文本框中得到消息摘要m_message.GetWindowText(message,200); len=strlen(message); charshowstr[1000]=""; intNO_BITS=32; doublec=0,d=1; charbits[100]; doublen=(double)m_n; unsignedcharch; doubledata;//19; longi,k=NO_BITS; intsizeof_d=sizeof(double);//將十進(jìn)制數(shù)私鑰d轉(zhuǎn)換為二進(jìn)制D_to_B(m_d,32,bits);//得到適當(dāng)字節(jié) GetOnlyProperBits(bits); k=NO_BITS=strlen(bits)-1; for(intii=0;ii<len;ii++) { //從message中讀取字符放入'data'中 ch=message[ii]; data=(double)ch; //計(jì)算((data)^dmodn)迅速指數(shù)算法實(shí)現(xiàn) c=0;d=1; for(i=k;i>=0;i--) { c=2*c; d=fmod(d*d,n); if(bits[NO_BITS-i]=='1') { c=c+1; d=fmod(data*d,n); } } //從'd'中讀取字符放入result中 result[ii]=d;//把字符串變?yōu)槭M(jìn)制數(shù)后連接字符串 strcat(showstr,longtohex(d)); }//結(jié)束循環(huán)//顯示成果 m_result.SetWindowText(showstr); }//字符串變?yōu)?6進(jìn)制數(shù)函數(shù)實(shí)現(xiàn)longtohex(longx){charstr[8]; inti=0;//商 inta;//余數(shù) intb; longtt=x; while(tt>=16) { a=tt/16; b=tt%16; switch(b) { case0:str[i]='0';break; case1:str[i]='1';break; case2:str[i]='2';break; case3:str[i]='3';break; case4:str[i]='4';break; case5:str[i]='5';break; case6:str[i]='6';break; case7:str[i]='7';break; case8:str[i]='8';break; case9:str[i]='9';break; case10:str[i]='A';break; case11:str[i]='B';break; case12:str[i]='C';break; case13:str[i]='D';break; case14:str[i]='E';break; case15:str[i]='F';break; }; i++;tt=a; } str[i]='\0'; strrev(str); returnstr;}3.2.4驗(yàn)證數(shù)字簽名設(shè)計(jì)與實(shí)現(xiàn)得到數(shù)字簽名得到數(shù)字簽名用公鑰e解密數(shù)字簽名得到消息摘要(解密信息)開始結(jié)束圖3-4驗(yàn)證數(shù)字簽名流程驗(yàn)證數(shù)字簽名對(duì)的與成功性,重要是比較得到兩次消息摘要與否同樣,如果驗(yàn)證方用簽名方公鑰解密得到消息摘要(即是本設(shè)計(jì)中得到解密信息)和她自己計(jì)算得到消息摘要(在本系統(tǒng)中為第一次計(jì)算得到消息摘要)是同樣,則證明簽名是對(duì)的,沒有被篡改或是冒充,驗(yàn)證簽名原理則是依照RSA解密算法,詳細(xì)理論流程圖如圖3-4所示:(在本設(shè)計(jì)中簽名和驗(yàn)證簽名都在同一界面實(shí)現(xiàn),不進(jìn)行文獻(xiàn)雙方傳播)驗(yàn)證數(shù)字簽名過程時(shí)應(yīng)用解密算法是RSA解密原理,而RSA解密過程也應(yīng)用了求一種整數(shù)整多次冪,再取模運(yùn)算。在此也采用了迅速指數(shù)算法,詳細(xì)算法過程同RSA加密過程中應(yīng)用迅速指數(shù)算法是同樣。驗(yàn)證數(shù)字簽名重要實(shí)現(xiàn)過程代碼如下:intNO_BITS; doublec=0,d=1; charbits[100]; doublen=(double)m_n; doubledata;//19; longi,k;intsizeof_d=sizeof(double);//用于存儲(chǔ)解密信息 charmessage[200];//將十進(jìn)制數(shù)公鑰e轉(zhuǎn)換為二進(jìn)制 D_to_B(m_e,32,bits); GetOnlyProperBits(bits); k=NO_BITS=strlen(bits)-1; for(intj=0;j<len;j++) { //從result中讀取字符放入'data'中 data=result[j]; //計(jì)算((data)^emodn)迅速指數(shù)算法實(shí)現(xiàn) c=0;d=1; for(i=k;i>=0;i--) { c=2*c; d=fmod(d*d,n); if(bits[NO_BITS-i]=='1') { c=c+1; d=fmod(data*d,n); } }//結(jié)束循環(huán) //從'd'中讀取字符放入message中 message[j]=d; }//顯示成果 m_mingwen.SetWindowText(message); }3.2.5RSA數(shù)字簽名運(yùn)營成果圖3-5RSA數(shù)字簽名運(yùn)營成果在本軟件中得到二個(gè)消息摘要:依照寫入消息(明文信息)計(jì)算出來消息摘要、解密數(shù)字簽名得到消息摘要(即是本設(shè)計(jì)中解密信息)。如果兩個(gè)消息摘要是同樣則證明RSA數(shù)字簽名者身份真實(shí)性,從而實(shí)現(xiàn)了RSA數(shù)字簽名。該系統(tǒng)運(yùn)營成果如圖3-5所示。產(chǎn)生消息摘要和解密得到消息摘要(在此處是解密信息)是完全同樣,則證明了數(shù)字簽名真實(shí)性。4軟件整體測(cè)試和分析改進(jìn)4.1軟件整體測(cè)試(1)測(cè)試密鑰生成:產(chǎn)生密鑰前提是要有兩個(gè)素?cái)?shù)生成,密鑰產(chǎn)生依賴于素?cái)?shù)生成,素?cái)?shù)生成不同樣則密鑰也會(huì)不相似,在本設(shè)計(jì)中素?cái)?shù)是47和71,則相相應(yīng)密鑰是公鑰(3,3337)和私鑰(2147,3337);(2)測(cè)試消息摘要MD生成:寫入消息(明文信息)不同樣得到消息摘要就有所區(qū)別,但是在產(chǎn)生消息摘要時(shí)所使用計(jì)算辦法是同樣即MD5算法,該算法核心是其中四輪循環(huán),如果四輪循環(huán)中一種細(xì)節(jié)出了問題則所產(chǎn)生MD便是相差極遠(yuǎn),如若明文信息是dfgfhfhgjk則得到消息摘要A4127B4881D24B01A85696477A07C17C,若明文信息是cvnjj則得到消息摘要是A1E2C15FF4C9F4D407EF33D1AC56C632;(3)測(cè)試數(shù)字簽名生成:依照RSA算法加密原理對(duì)不同消息摘要MD進(jìn)行加密運(yùn)算,得到便是不同數(shù)字簽名DS;若消息摘要MD是A1E2C15FF4C9F4D407EF33D1AC56C63

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論