《RSA算法及其在加密系統(tǒng)中的應(yīng)用研究》9700字_第1頁
《RSA算法及其在加密系統(tǒng)中的應(yīng)用研究》9700字_第2頁
《RSA算法及其在加密系統(tǒng)中的應(yīng)用研究》9700字_第3頁
《RSA算法及其在加密系統(tǒng)中的應(yīng)用研究》9700字_第4頁
《RSA算法及其在加密系統(tǒng)中的應(yīng)用研究》9700字_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

RSA算法及其在加密系統(tǒng)中的應(yīng)用研究目

錄TOC\o"1-3"\h\u14358摘要 I301111密碼學簡介 1295661.1什么是密碼學 1187511.2研究密碼學的意義 1156311.3當今社會對密碼學領(lǐng)域的探究的水平 163592RSA算法的背景及簡介 2236882.1RSA算法的背景介紹 2220892.2什么是RSA算法 3319332.3研究RSA加密算法的意義 3265362.4RSA加密算法的優(yōu)缺點 3327002.4.1RSA加密算法的優(yōu)點 345952.4.2RSA加密算法的缺點 3238483RSA數(shù)學基礎(chǔ) 46243.1數(shù)論的基礎(chǔ)知識 462903.1.2素數(shù)與合數(shù) 5133543.1.3互質(zhì)數(shù) 5142303.2模算術(shù)運算 666923.2.1模運算的概念 676093.2.2模運算的性質(zhì) 6317903.3歐拉定理及相關(guān)概念 793104RSA的安全性分析 891074.1對RSA的分解模數(shù)n的攻擊 8141614.2對RSA的選擇密文攻擊 976655代碼的分析與實現(xiàn) 10170785.1RSA加密算法描述 10204635.2實現(xiàn)語言介紹 10259475.3實現(xiàn)工具介紹 1178725.4對RSA加密算法的實現(xiàn) 12129985.5整體代碼展示 13282975.6對RSA加密算法結(jié)果的測試 2127246參考文獻 22摘要:在當今社會,信息安全問題遍布在生活中的每一個角落,黨的十八大以來,習近平總書記高度重視網(wǎng)絡(luò)安全和信息化的相關(guān)工作,并提出了一系列具有開創(chuàng)性意義的新觀點新論斷新思想,形成了習近平網(wǎng)絡(luò)強國戰(zhàn)略思想。在這一重要思想指引下,我國網(wǎng)信事業(yè)取得了積極進展和矚目成就。其中密碼學在網(wǎng)絡(luò)安全領(lǐng)域發(fā)揮著極大的作用,本文將對密碼學中基于RSA加密系統(tǒng)的分析與實現(xiàn)來進行研究,RSA算法是用數(shù)論模型構(gòu)建出的一種算法,因其安全性好等原因,在各個領(lǐng)域中都有RSA加密系統(tǒng)的身影,但是RSA算法實現(xiàn)的難度方面較大,代碼運行起來時間周期較長,也是較為復雜的一種算法,隨著RSA算法的普遍應(yīng)用,研究此算法的意義也愈發(fā)重大。在本篇文章中,我對RSA算法進行了詳細的介紹,并通過對英文的加密,來更加深入的了解RSA加密系統(tǒng),希望通過本篇文章大家可以對RSA加密系統(tǒng)有更深一步的了解。關(guān)鍵詞:RSA加密密碼學網(wǎng)絡(luò)安全

1密碼學簡介1.1什么是密碼學密碼學是一種用來進行編制和破譯密碼的技術(shù)科學,數(shù)學為密碼學主要的底層算法。密碼中的客觀規(guī)律就可以通過密碼學來進行探究。從安全技術(shù)原理角度上來籠統(tǒng)的講密碼體制一般可再簡單地分為單鑰密碼體制和雙鑰密碼體制這一兩大類。唯密文攻擊的類型;已知明文密碼攻擊的類型;選擇明文密碼攻擊的類型;選擇密文攻擊的類型這是密碼攻擊者中對于明文密碼攻擊類型來說較為常見的前四種密碼攻擊類型。1.2研究密碼學的意義信息科技影響著現(xiàn)今時代人們?nèi)粘I?、工作學習、社會生活的方方面面并在其中起到的巨大的影響,信息科技作為安全的保障也逐漸的成為了在當今時代商業(yè)社會的運作方式中的最舉足輕重的‘最優(yōu)質(zhì)的一種戰(zhàn)略策略資源,在信息技術(shù)的日新月異,科技的迅速的發(fā)展的同時也在潛移默化的悄然的改變了著我們現(xiàn)在的人們?nèi)粘9ぷ髦械纳鐣W習的生產(chǎn)模式及生活方式,信息產(chǎn)業(yè)也成為了當今世界上一種不可或缺的經(jīng)濟發(fā)展潮流,我們對信息安全的認識也開始逐漸全面起來。信息安全的威脅在人為防護方面的安全威脅主要來源于這兩種,主要是為防止用戶和惡意軟件等的惡意非法入侵。信息安全問題從最初的面向軍方到面向用戶共享,再到用來保證世界這個復雜而又龐大的網(wǎng)絡(luò)安全。對于這些安全威脅,我們需要通過成熟的技術(shù)手段來減少以及避免不必要的損失。對于密碼學的探究也正是對安全威脅的有效防護。1.3當今社會對密碼學領(lǐng)域的探究的水平在當今社會隨著區(qū)塊鏈,云計算,物聯(lián)網(wǎng)等多種互聯(lián)網(wǎng)科技的發(fā)展,生活中人們更多的選擇是將自己的信息數(shù)據(jù)交給第三方的數(shù)據(jù)服務(wù)平臺以便捷自己便捷他人。然而第三方服務(wù)平臺也并不是百分之百安全的,也會有許多漏洞需要不斷修復,攻擊者往往抓住這些漏洞來盜取用戶的相關(guān)信息,以此來進行牟利,這種現(xiàn)象是非常常見的,也是防不勝防的,所以我們務(wù)必要對交給第三方數(shù)據(jù)平臺的數(shù)據(jù)來進行加密,以保證人們的信息更加安全。密碼學也是與我們的生活息息相關(guān)的。與此同時,密碼學的發(fā)展也給許多新興技術(shù)帶來了推廣以及提升。密碼技術(shù)既是來實現(xiàn)保護計算機系統(tǒng)數(shù)據(jù)及安全保密的一個重要應(yīng)用技術(shù),也是計算機用來實現(xiàn)計算機系統(tǒng)信息傳輸安全加密和維護網(wǎng)絡(luò)環(huán)境安全穩(wěn)定的最重要手段。2RSA算法的背景及簡介2.1RSA算法的背景介紹在我們的生活中,網(wǎng)絡(luò)信息技術(shù)無處不在?,F(xiàn)如今,互聯(lián)網(wǎng)時代帶來的各種信息的飛速地發(fā)展也是使得我們可以獲得到很多更加快速和便捷的新生活方式,同時它也會隨之的帶來很多網(wǎng)絡(luò)信息和安全問題,從國家的機密信息再到我們的個人信息。網(wǎng)絡(luò)安全與信息安全問題應(yīng)當越來越受到人們的重視,如何解決網(wǎng)絡(luò)安全,信息安全問題,也成為了社會發(fā)展的重要一環(huán),密碼學就是解決這一類問題的基礎(chǔ)科學。本篇論文中我將主要來介紹密碼學中的RSA加密算法。非對稱加密算法就是指算法在加密和解密的時候,都有相同或不同種類密鑰類型的密鑰運算的法則,也就是說在加密計算中和解密運算分別使用著對應(yīng)這兩種或不同密鑰類型的密鑰,就不會直接知道解密密鑰,這也就增大了RSA算法的安全性。RSA算法的安全性是廣泛受到大家認可的,也是公鑰密碼體制中最具代表性的一種算法,在各個領(lǐng)域中都有RSA加密算法的身影,但是RSA算法實現(xiàn)的難度方面較大,代碼運行起來時間周期較長,也是較為復雜的一種算法,隨著RSA算法的普遍應(yīng)用,研究此算法的意義也愈發(fā)重大。RSA的公鑰密碼體制最初是在公元的1978年由美國麻省理工學院的Rivest,Shamir和Adleman三個人所共同提出來的,三個人姓氏的第一個英文的首字母就是RSA這個英文名字的最早的由來。它首先提出素數(shù)的安全性基礎(chǔ)思想,在數(shù)論基礎(chǔ)上和數(shù)值計算理論上的復雜性理論基礎(chǔ)研究中較為一致的兩個關(guān)鍵性論斷:求算出的兩個或更大的素數(shù)因子之間的最小乘積方法在一般數(shù)值計算應(yīng)用研究上來說應(yīng)該會是一種相當?shù)娜菀锥M行起來的,但事實上若真的要想用分解掉這一兩個比較大的素數(shù)因子之間的最大乘積方法去求取計算出兩個大于與它最大乘積方法的素數(shù)因子將也同樣在數(shù)值計算的操作技術(shù)上存在巨大的困難與問題的。2.2什么是RSA算法RSA算法是指一種用數(shù)論模型構(gòu)建出來的一種密碼算法,是一個到目前為止在密碼理論框架里,最接近完善的,最成熟的公鑰密碼體制,此算法已在密碼各個重要領(lǐng)域內(nèi)也逐步得到了很廣泛深入的應(yīng)用。2.3研究RSA加密算法的意義RSA算法在安全性方面做的很好,容易實現(xiàn)用戶的目的需求,RSA算法是到目前為止最為成熟的的公開密鑰系統(tǒng),關(guān)于RSA算法,國際上有許多論文為本課題的研究做基礎(chǔ),所以研究RSA加密算法是具有重要意義的。2.4RSA加密算法的優(yōu)缺點2.4.1RSA加密算法的優(yōu)點1、RSA算法所運用的數(shù)學基礎(chǔ)易于理解,一環(huán)扣一環(huán),所用算法清晰明了。2、RSA算法在加密和數(shù)字簽名領(lǐng)域都有所應(yīng)用。3、RSA算法中的算法密鑰在數(shù)據(jù)安全性方面也就是相比較于其他加密的算法密鑰來說在數(shù)據(jù)穩(wěn)定性上面要比較高,加密密鑰也和解公密算法的密鑰要有些地方不一樣,一般在默認加密情況下,私鑰則為默認加密密鑰,公鑰則是為默認解密算法密鑰。2.4.2RSA加密算法的缺點1、生成密鑰是個很麻煩的事情,素數(shù)產(chǎn)生技術(shù)是有一定局限性的,很難做到Vernam加密法。2、由于RAS算法都是大數(shù)計算,無論是在軟件的實現(xiàn)還是硬件的實現(xiàn)上,運算速度也比較緩慢,所以RSA算法經(jīng)常應(yīng)用于少量數(shù)據(jù)的運算加密。3、RSA算法的安全性主要來自依賴相對于更高大數(shù)的因子分解算法時的困難性。3RSA數(shù)學基礎(chǔ)迄今為止,大部分的公鑰密碼體制算法都是一套由一些數(shù)學難題作為其理論基礎(chǔ)的加解密機制,其中,大整數(shù)的分解困難等問題也就是RSA加密算法研究的基礎(chǔ)。和其他大部分公鑰密碼體制一樣,其加密算法的逆元問題決定了RSA加密算法安全性的強弱。換句話說,求把任意的兩個大的素數(shù)相乘所得的結(jié)果相對還是可以很容易得的,但是如果把每一個正大數(shù)都拆分成這兩個大素數(shù)的話還是有非常多困難的。所以說,我們要把這樣類型的密碼函數(shù)取名叫為單向密碼函數(shù)。在當今我們每天所必須接觸用到的各種密碼學工具中,單向密函數(shù)在它們其中也占比量很大,構(gòu)建這樣一個公鑰密碼體制,單向函數(shù)也是非常重要的。在此部分,為了更好地了解RSA加密算法,我將對數(shù)論中與之相關(guān)的部分做一下基本的介紹。3.1數(shù)論的基礎(chǔ)知識定義1:假設(shè)m和n為兩個任意的整數(shù),n不等于0,如果存在一個整數(shù)r,讓m等于nr,那么就把n叫做m的公因數(shù),m也是n的倍數(shù),m可被n整除,可記作n|m。定義2:假設(shè)m和n為兩個整數(shù),如果存在一個整數(shù)r,使m可被r整除,n也可被r整除,那么r就是m和n的公因數(shù),其中,在公因數(shù)里最大的那個公因數(shù)叫做最大公因數(shù)。定理1:假設(shè)m和n是兩個整數(shù),如果m等于q乘以n加r,那么q為商,r為其余數(shù),r小于n,則m和n的最大公因數(shù)等于n和r的最大公因數(shù)。證明:假設(shè)d為m和n的最大公因數(shù),d1為n和r的最大公因數(shù)由m等于q乘n加r,m減q乘n等于r,已知r可被d整除,由n可被d整除及r可被d整除,故d1可被d整除。反過來,d1是n和r的最大公因數(shù),m等于q乘n加r,所以m可被d1整除,由m可被d1整除及n可被d1整除,故d可被d1整除。由d1可被d整除和d可被d1整除,可知d等于d1,所以m和n的最大公因數(shù)等于n和r的最大公因數(shù)。3.1.2素數(shù)與合數(shù)取一個大于一的整數(shù)p,如果1和它本身為p僅有的兩個因子,那么我們就把p叫做質(zhì)數(shù),如果p不僅僅有1和它本身兩個因子,那么我們就把p叫做合數(shù)。既不是只有一個正質(zhì)數(shù)也就不是負整合正數(shù)負的負質(zhì)數(shù)中也有很多個負數(shù),0之和才是正負1,素數(shù)的個數(shù)也是有無限窮高的,而且是對其中任意數(shù)的任意一個的負正質(zhì)整數(shù),把將其分解成乘積的形式,此乘積中的所有乘數(shù)都可以是質(zhì)數(shù)。公式1:整數(shù)n的標準分解式:n等于p1的e1次方乘p2的e2次方乘p3的e3次方乘p4的e4次方乘一直乘到pm的em次方。其中p1小于p2小于p3小于p4直到小于pm,ei為零或正整數(shù)。在這個公式中,如果n的取值到達非常大的時候,那么如果想要求出n的標準分解式是十分困難的,也正因為這樣的困難的公式,才使得RSA算法的安全性得到了強有力的保證,這也是RSA算法中較為突出的優(yōu)點,也是RSA算法中非常重要的特質(zhì),所以RSA算法適合于大數(shù)方面的運算。3.1.3互質(zhì)數(shù)m,n為兩個正整數(shù),如果1是m和n唯一的公因數(shù),那我們把這種特質(zhì)叫做m和n互質(zhì)。m1,m2,m3,m4.,mk為k的個正整數(shù),如果對于其中任意一點的i不等于j,且其中i大于或等于1,j都小于和等于k,ni和nj都是互質(zhì),那么現(xiàn)在我們便把這點k為個的正整數(shù)就叫做兩兩互質(zhì)。如果存在了一個同質(zhì)數(shù)p并使得另外兩個的正整數(shù)都可以與其互質(zhì),那么和這另外兩個的正整數(shù)相乘得的數(shù)值就也稱為和這個p的互質(zhì)。3.2模算術(shù)運算3.2.1模運算的概念A可以為一對任意一個整數(shù),n可為另一對正整數(shù),存在對應(yīng)著對唯一的對整數(shù)的q和的r,滿足設(shè)r大于或等于為零且n大于為r,a等于為q和與對n和的乘積再加為r,則可以稱作r是一個a的對數(shù)n和的模運算。A如果除以所有n次方的算術(shù)商記為q,那么[x]就應(yīng)該表示為一個小于或至少等于這個x數(shù)的算術(shù)最大的整數(shù),所以,對其中任意的一個大整數(shù)的a都應(yīng)該可以這樣表示即為a=[a/n次方]n+amodn3.2.2模運算的性質(zhì)數(shù)學中包含著模運算的一些概念,我們可以通過這些概念發(fā)現(xiàn),幾乎是所有的整數(shù)的集合可以通過模運算和n次模的運算把他們直接的映射到另一個充滿了整數(shù)的集合中{0,1.,(n-1)}中,這種運算的方式我們又習慣上稱他為模n運算。模數(shù)運算形式也是可以說和許多其它的普通數(shù)學的數(shù)學運算的形式極為相似,他這種形式同時也很特別地適用于分配律,交換律,結(jié)合律。交換律(x+y)modn=(y+x)modn(x*y)modn=(y*x)modn結(jié)合律((x+y)+z)modn=(x+(y+z))modn((x*y)*z)modn=(x*(y*z))modn(xmodn+ymodn)modn=(x+y)modn(xmodn*ymodn)modn=(x*y)modn分配律(x+y)modn=(xmodn+ymodn)modn(x*y)modn=(xmodn*ymodn)modn(x*(y+z))modn=(x*y+x*z)modn恒等式(0+x)modn=xmodn(1*x)modn=xmodn冪模運算可以把其看成對應(yīng)次數(shù)的模成運算例如15^7mod11=(15mod11)^7mod11=4^7mod11=×((4^2mod11)^3*4mod11)mod11=×(4mod114mod11)mod11=16mod11=53.3歐拉定理及相關(guān)概念數(shù)論領(lǐng)域中著名的歐拉定理也是建立RSA密碼體制必需的一個基礎(chǔ)理論。定理1:取一個正整數(shù)m,把正整數(shù)1到m中與m互為素數(shù)的數(shù)的個數(shù)稱為?(m)此函數(shù)就叫做歐拉函數(shù)。定理2:如果整數(shù)a與m互為質(zhì)數(shù),那么a^?(m)≡1modm。證明:設(shè)?(m)=k,r1,r2,r3,r4...rk為1,2,...,m?1中和m互為素數(shù)的數(shù)。因為a與m互為素數(shù),所以ari和m互為素數(shù)。那么我們還需要證明ar1,ar2,...ark的模m互不相同。如果ari≡arjmodm,那么m|a(ri-rj),因為整數(shù)a和m互為素數(shù),那么m|(ri-rj),就使得ri=rj,任意的i大于等于1,i小于等于k,ari和m互為素數(shù),所以存在ari≡rjmodm,當ri取遍r1,r2,...rk時,rj也恰好取遍r1,r2,...rk,通過模運算的結(jié)合律可知,a^kr1r2.rk≡r1r2.rkmodm,又因為r1,r2,.rk和m互為素數(shù),那么a^k≡1modm。證畢。定義1:如果對于我們而言有任意的兩個整數(shù)模a和兩個整數(shù)模p,存在任何另一個整數(shù)模b,使他們也同時都滿足abmodp=1,那么我們現(xiàn)在我們就應(yīng)該叫b為兩個整數(shù)模a中的模和模p中的乘法逆元。定理3:如果同時存在著兩個整數(shù)模a和模數(shù)p,gcd(a,p)=1這是模a和同時存在一個模整數(shù)數(shù)p的最小乘法逆元的唯一充要的條件。4RSA的安全性分析一般的情況下從數(shù)學理論基礎(chǔ)角度上來講,在RSA攻擊的安全性程度中非常重要的基礎(chǔ)是因式分解模量n的困難性的程度。在從數(shù)學技術(shù)層面上來講,這種看法其實完全都是一個極其不正確的,那么即使是從在整個的數(shù)學領(lǐng)域發(fā)展中來看,到了到目前為止,也就始終也沒有人被證明出攻擊RSA攻擊的安全性問題的一個最佳的解決的方法其實就是分解一個模數(shù),以及分解一個大數(shù)到一個整數(shù)也其實就是一個NP的問題。從目前我們所目前在研究的另一些實際情況研究中結(jié)果來看,大整數(shù)因子的分解問題至今為止依舊可認為它是在當前為止全世界科學家都認為尚未真正能夠被解決的另外一個大難題。也可能確實曾經(jīng)有人在嘗試過使用另一些非因子分解的途徑來進行攻擊RSA的這種體制,但是因子分解的n種方法遠遠比所有這些方法都來得要更容易得更多。所以現(xiàn)在我們必須說要從某種更嚴格的意義上來去講,RSA體系的安全性也就是安全性基于求解對其單向函數(shù)的求可逆問題時的困難性。真正歸因式分解模數(shù)為n時的系統(tǒng)安全性肯定都要遠遠地比對于RSA的單向函數(shù)的求逆時的系統(tǒng)安全性還要來得高,況且即便到了到目前為止,也還是確實并沒有人可以去完全地證明這二者之間可以等價。有很多的學者都試圖使二者的安全性等價。迄今為止,RSA應(yīng)用在各種各樣的領(lǐng)域,這使得RSA加密算法的安全性變得十分穩(wěn)定且可靠。不過在一些特殊情況下,RSA算法中的一些漏洞也會導致算法受到攻擊。如果我們能夠認真考慮缺陷并解決的話,這些漏洞也會被我們修補。對RSA算法的攻擊主要有以下幾種:4.1對RSA的分解模數(shù)n的攻擊在許許多多攻擊的方法中對RSA的分解和對模數(shù)n的攻擊是對于這種攻擊最有效的一種攻擊方法,對模數(shù)攻擊方法中的攻擊這種攻擊的方法也是攻擊方法其中的最有困難性的。因為如果原始密鑰數(shù)數(shù)e和初始密鑰模數(shù)數(shù)n等都是已經(jīng)完全的公開了出來了的那么攻擊者也將可能很容易地很快就會被自動的獲得出了其的原始密鑰信息,因為攻擊這種攻擊的方法所使用到的原始的密鑰數(shù)和原始密鑰模數(shù)等都是被完全地公開了出來的了的;如果模數(shù)的和n都等于p并乘以q,那么攻擊者便可從此分解式中我們也可以直接的看出?(n)=(p?1)(q?1),就可以求得ed≡1(mod?(n)),通過此式子就可以得到解密密鑰d。在數(shù)論與密碼理論的研究中,大整數(shù)分解一直是一個非常重要的研究部分。接下來的部分我來敘述其他常見的對RSA算法的攻擊。4.2對RSA的選擇密文攻擊被攻擊者是選擇密文攻擊對象的這種方法是我們在對RSA選擇密文攻擊中最常用的一種方法,這種方法也是迄今為止最有效果的一種利用一個攻擊對象的方法,RSA中的一些加密變換的性質(zhì)也常常會引起其對于選擇密文的攻擊。一般來說,下面三種情況就是RSA加密變換的選擇密文的攻擊的方式中最常見的:(1)明文破譯。某用戶u進行公鑰e密碼后的密文y≡x^e(modn)可以被攻擊者所獲取,并且攻擊者會嘗試把消息x恢復出來。然后r<n這個不等式是隨機選取的,于是我們可以通過上述式子可以算出y1≡r^e(modn),這就意味著r≡y1^d(modn)。計算y2≡(yy1)(modn)。令t≡r^(?1)(modn),則t≡y1^(?d)(modn),然后攻擊者讓u對消息y二進行了簽名,從中得到了s≡y2^d(modn)。攻擊者就可以通過t1=ts≡y1^(-d)y2^(-d)(modn)≡y1^(-d)y^dy^d(modn)≡y^d(modn)≡x進行計算,從而得到明文。(2)為騙取仲裁人簽名。前提是在有仲裁者的這種情況下,要是某個用戶u有錯誤的文件并且申請仲裁,那么也可以先將密碼送給仲裁T,T就會用RSA的解密密鑰來進行簽名然后再發(fā)給u。要是攻擊者有一條消息需要仲裁者T來進行簽名,但是仲裁者T卻拒絕了他的這個請求,因為這條消息里可能含有一些虛假的信息,此消息也可能來自于非法用戶。但是攻擊者也不是沒有其他選擇,他也可以通過下面的這個方式來騙取T的簽名。我們把攻擊者的消息設(shè)為x,第一步他需要任意的選取一個數(shù)為N,然后計算y≡N^e(modn),再來算M=yx,然后把它贈與T,m^d≡modn,e就為T簽名的結(jié)果,并且將此發(fā)送給了攻擊者,結(jié)果則有:(M^d(modn))N^(?1)≡(yx)^dN^(?1)≡(x^dy^dN^(?1))≡x^dNN^(?1)≡x^d(modn),這時T對x的簽名就被攻擊者成功騙取了。(3)偽造合法簽名。攻擊者可以使用自己偽造的二個消息將他們設(shè)為x1和x2,用來拼湊出他所需要的x3≡(x1x2)(modn)。要是攻擊者獲得到了用戶u對與x1和x2的簽名記為x1^d(modn)和x2^d(modn),就可以通過這個簽名來計算出x3的簽名,x3^d≡((x1^d(modn)(x2^dmodn))(modn)。明文的消息就可以采用雜湊函數(shù)的方式來進行高效轉(zhuǎn)換,就能夠非常有效地抵御試圖利用選擇的密文攻擊來破譯明文的這種方式。另外,我們?yōu)榱吮苊忉槍灻倪x擇密文攻擊,仲裁里也有相應(yīng)的規(guī)定,他也不能給陌生的用戶來進行簽名。5代碼的分析與實現(xiàn)5.1RSA加密算法描述(1)選取兩個對其保密的大素數(shù),我們稱其為p和q。(2)我們計算p和q的乘積為n,p減1和q減1的乘積為?(n),這里面的?(n)就是p和q乘積n的歐拉函數(shù)。(3)選取一個正整數(shù)e,且滿足整數(shù)e的值在1和?(n)之間并且?(n)與e的最大公因數(shù)為1.(4)通過d*e≡1mod?(n)來算出d的值。(5)將{e,n}作為公開密鑰,將{d,n}作為加密密鑰。(6)在進行加密運算的時候,我們可以將明文的比特串分組,使得每個分組里面其所對應(yīng)的十進制數(shù)值都小于n,再對每個明文m進行對應(yīng)的加密運算c≡m^emodn。5.2實現(xiàn)語言介紹C語言是一種計算機編程語言,它是是面向過程的,C語言和C++、C#、Java這一系列語言是不一樣的,這些語言是面向?qū)ο缶幊痰恼Z言。我們設(shè)計C語言的目的就是給我們可以提供出一種能夠用簡潔容易的方式來編譯、處理低級存儲器、僅產(chǎn)生少量的機器碼以及不需要任何運行環(huán)境支持便能運行的編程語言。用C語言來描述問題是非常方便的,它比那些匯編語言反應(yīng)更迅速、工作量更小、可讀性更好、并且且易于調(diào)試、修改以及移植,代碼的質(zhì)量和匯編語言的質(zhì)量也是基本相當?shù)?。在一般情況下,通過C語言代碼生成的目標程序,其效率僅僅比匯編語言低10%-20%。所以,系統(tǒng)軟件方面也可以通過C語言來進行編寫。在當前這個階段下,在編程領(lǐng)域中,C語言的用途可謂是非常之多,匯編語言和高級語言里二者的優(yōu)點C語言也全都有,并且C語言也比其它的編程語言更具有優(yōu)勢。C語言應(yīng)用在計算機系統(tǒng)的設(shè)計和應(yīng)用程序的編寫這兩大領(lǐng)域。與此同時,C語言的普適性較強,大多數(shù)的計算機操作系統(tǒng)中C語言都得以適用,并且效率顯著。C語言擁有這個完整的理論體系經(jīng)歷了漫長的發(fā)展過程,也是編程語言中不可或缺的一部分。普適性是最強的一種編程語言就是C語言,它不僅僅可以使用高級編程語言中的功能,而且具有著匯編語言中的優(yōu)點,因此相比較于其它的編程語言,它擁有自己獨具的特點。這些特點具體體現(xiàn)在這三個方面:其一,廣泛性。C語言的優(yōu)劣性是可以通過所能運算的范圍大小來決定的。在C語言中,它涵蓋了三十四種運算符,因此C語言運算范圍比許多程序語言的范圍都要廣泛,除此之外,C語言運算結(jié)果中的表達形式也變得多種多樣。并且,多種數(shù)據(jù)結(jié)構(gòu)的形式都囊括在C語言中,因此它能帶動許許多多功能龐大的數(shù)據(jù)結(jié)構(gòu)來進行運算。其二,簡潔性。C語言中其所擁有的基礎(chǔ)特性分為9類控制語句以及32個關(guān)鍵字,這些基礎(chǔ)特性這使得它擁有極大的適用性,既能用編程人員來進行操作,又能用它來進行高級編程,這種特性避免了在語言切換中的繁瑣過程。其三,結(jié)構(gòu)完善。C語言是一種結(jié)構(gòu)完善的語言,用它來實現(xiàn)應(yīng)用程序是可以通過組建模塊單位這種形式來完成的,并且在系統(tǒng)方面的應(yīng)用也具備了明顯的優(yōu)勢,所以,這個特性也可以讓他應(yīng)用于各種各樣的編程,并且執(zhí)行的效率方面會更高。5.3實現(xiàn)工具介紹在Windows環(huán)境下,Dev-C++對初學者是相對友好的,它是一個輕量級C/C++集成開發(fā)環(huán)境,它是自由軟件,遵循GPL許可協(xié)議來分發(fā)源代碼。MingW64/TDM-GCC是Dev-C++所使用的編譯器。多頁面窗口、工程編輯器調(diào)試器等都是它的開發(fā)環(huán)境,它既適合供C/C++語言的初學者來使用,也適合于非商業(yè)級普通開發(fā)者使用。多國語言版中涵蓋了二十幾個國家和地的語種。該軟件是基于Delph來i編寫的。Dev-C++的優(yōu)點也有很多,如:(1)它集成了AStyle源代碼格式整理器,在“格式化當前文件”這個按鈕中,我們就能把這個窗口里的源代碼按照一定的風格整理好排版格式。(2)有許多我們可以用到的源代碼片段,此軟件也包含在內(nèi),點擊“插入”按鈕即可。(3)它支持的項目開發(fā)有單文件與多文件開發(fā)這兩種。并且它也能針對單文件來做編譯或調(diào)試。(4)編譯出錯的信息可以自動顯示為中文,有利初學者理解問題并解決問題。5.4對RSA加密算法的實現(xiàn)#include<stdio.h>//包含頭文件#include<stdbool.h>//包含布爾類型頭文件#include<string.h>//包含字符串處理函數(shù)頭文件boolprimenumber(intg){//判斷一個數(shù)是否為素數(shù) for(intr=2;r<g;r++){//我們?nèi)從2開始到素數(shù)減一結(jié)束,開始循環(huán) if(g%r==0)//將素數(shù)g與r進行模運算取余 returnfalse;//若余數(shù)為零,則返回false } returntrue;//若余數(shù)不為零,則返回true}boolcoprime(intp,intq){//判斷兩數(shù)p,q是否互素 inta,b;//定義整數(shù)變量a和b if(q<p){//如果q小于p a=p;//將p賦值給a p=q;//將q賦值給p q=a;//將a賦值給a,也就是將q和p的值調(diào)換,保證q大于p } a=q%p,b=q/p;//將q和p取余賦值給a,將q和p取整賦值給b while(a!=0){//當a不等于零時,進行以下循環(huán) q=p;//將p賦值給q p=a;//將a賦值給p a=q%p;//將q和p取余賦值給a b=q/p;//將q和p取整賦值給b } if(a==0&&b==q){//如果a等于0,b等于q同時滿足時 printf("p與q互質(zhì),符合條件,繼續(xù)\n");//輸出p與q互質(zhì),符合條件,繼續(xù) returntrue;//返回true } else{ printf("不符合條件,請重新輸入:\n");//否則輸出不符合條件,請重新輸入: returnfalse;//返回false }}intinverseelement(inte,intt){//定義一個求私鑰d的函數(shù) intd;//定義整數(shù)變量d,e,t for(d=0;d<t;d++){//從d等于零開始,且d小于t,每循環(huán)一次將d加一 if(e*d%t==1)//如果e和d的乘積與t取余等于1時 returnd;//返回到整型變量d }}voidencrypt(inte,intn){//定義一個加密函數(shù)encryptintlength;//定義一個整型變量lengh代表長度 charplaintext[100];//定義一個名字為plaintext的數(shù)組,其長度為100 printf("請輸入明文:\n");//輸出請輸入明文: scanf("%s",plaintext);//輸入想要加密的字符串 length=strlen(plaintext);//將字符串的長度賦值給lengh intmingwen[strlen(plaintext)];//定義這個符號明文 for(inti=0;i<strlen(plaintext);i++){//定義一個整型變量i//從i等于零開始,最大到字符串長度減一,進入循環(huán) mingwen[i]=plaintext[i];//將plaintext[i]賦值給mingwen[i] printf("%d",plaintext[i]);//并輸出plaintext[i] } printf("\n");//換行 printf("加密開始進行\(zhòng)n");//輸出加密開始進行 inttemp=1;//定義整型變量temp初始值為1intciphertext[100];//定義一個名字為ciphertext的數(shù)組,其長度為100 for(inti=0;i<strlen(plaintext);i++){//從i等于零開始,最大到字符串長度減一,進入循環(huán) for(intj=0;j<e;j++){//從j等于零開始,最大e減一,進入循環(huán) temp=temp*mingwen[i]%n;//將temp與mingwen[i]乘積與n求余賦值給temp } ciphertext[i]=temp;//將temp值賦值給ciphertext[i] temp=1;//將1賦值給temp } printf("加密密文為:\n");輸出加密密文為: for(inti=0;i<strlen(plaintext);i++)//定義一個整型變量i//從i等于零開始,最大到字符串長度減一,進入循環(huán) printf("%d",ciphertext[i]);//輸出加密密文 printf("\n已完成加密\n");//輸出已完成加密 }intmain(){//定義一個主函數(shù) intq,p,e,d,n,t,x,zop;//定義整型變量q,p,e,d,n,t,x,zop while(1){//無限循環(huán)的執(zhí)行循環(huán)體 printf("請輸入p:",p);//輸出請輸入pscanf("%d",&p);//輸入p的值 zop=primenumber(p);//將primenumber(p)賦值給zop if(zop==0){//如果zop的值不符合 printf("p不是素數(shù),請重新輸入p!\n");//輸出p不是素數(shù),請重新輸入p! continue;//繼續(xù)執(zhí)行判斷素數(shù)函數(shù) } printf("請輸入q:",q);//輸出請輸入q:scanf("%d",&q);//輸入qzop=primenumber(q);//將primenumber(q)賦值給zop if(zop==0){//如果zop的值不符合 printf("q不是素數(shù),請重新輸入q!\n");//輸出q不是素數(shù),請重新輸入q! printf("請輸入q:",q);//輸出請輸入q:scanf("%d",&q);//輸出q zop=primenumber(q);//將primenumber(q)賦值給zop } n=q*p;//將p,q乘積賦值給n t=(q-1)*(p-1);//

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論