畢業(yè)論文--分組密碼算法des的加密和解密的實(shí)現(xiàn)_第1頁(yè)
已閱讀1頁(yè),還剩54頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  分組密碼算法DES的加密和解密的實(shí)現(xiàn)</p><p><b>  摘 要</b></p><p>  隨著信息社會(huì)的到來(lái),人們?cè)谙硎苄畔①Y源所帶來(lái)的巨大的利益的同時(shí),也面臨著信息安全的嚴(yán)峻考驗(yàn)。信息安全已經(jīng)成為世界性的現(xiàn)實(shí)問(wèn)題,信息安全問(wèn)題已威脅到國(guó)家的政治、經(jīng)濟(jì)、軍事、文化、意識(shí)形態(tài)等領(lǐng)域,同時(shí),信息安全問(wèn)題也是人們能否護(hù)自己的個(gè)人隱私的關(guān)鍵。

2、信息安全是社會(huì)穩(wěn)定安全的必要前提條件。</p><p>  本文是一篇討論關(guān)于常用文件加密解密算法的畢業(yè)設(shè)計(jì)論文,它詳細(xì)的講述了文件加密解密算法實(shí)現(xiàn)的過(guò)程中所用到的方法、技術(shù)。</p><p>  關(guān)鍵詞:解密,文件加密,密碼體制,DES </p><p><b>  英文摘要</b></p><p><b>

3、  ABSTRACT</b></p><p>  With the advent of the information society, people in the enjoyment of information resources brought about tremendous benefits, but also faced with a letter Income security, a s

4、evere test. Information security has become a worldwide reality, information security has been a threat to the country's political .Governance, economic, military, cultural, ideological and other areas at the same ti

5、me, the issue of information security is also a possibility of retaining their own personal Privacy key. I</p><p>  Key words: Decryption,file encryption, cryptosystem, DES</p><p><b>  目

6、 錄</b></p><p><b>  前 言1</b></p><p>  第1章 概 述2</p><p>  1.1 加密與解密2</p><p>  1.2 單鑰密碼系統(tǒng)2</p><p>  1.3 分組密碼的總體結(jié)構(gòu)3</p><p&g

7、t;  1.4分組密碼的安全性4</p><p>  第2章 DES算法簡(jiǎn)介5</p><p><b>  2.1簡(jiǎn)介5</b></p><p>  2.2 DES加密標(biāo)準(zhǔn)6</p><p>  2.2.1 初始置換IP7</p><p>  2.2.2 IP-1是IP的逆置換7

8、</p><p>  2.2.3 DES算法的迭代過(guò)程8</p><p>  2.2.4 子密鑰的生成12</p><p>  2.3 DES算法的解密過(guò)程13</p><p>  第3章 DES算法用C++語(yǔ)言實(shí)現(xiàn)14</p><p>  3.1設(shè)置密鑰函數(shù)des_setkey()14</p>

9、;<p>  3.2 f函數(shù)和S函數(shù)f_func()和s_func()14</p><p>  3.3 DES算法的運(yùn)行函數(shù)des_run( )16</p><p>  3.4 DES算法的主函數(shù)void main()18</p><p>  3.5 DES的加密過(guò)程和舉例19</p><p>  3.6 DES算法的分

10、析21</p><p><b>  22</b></p><p><b>  結(jié) 論23</b></p><p><b>  參考文獻(xiàn)24</b></p><p><b>  致 謝25</b></p><p><b&

11、gt;  附 錄26</b></p><p><b>  前 言</b></p><p>  密碼學(xué)是伴隨著戰(zhàn)爭(zhēng)發(fā)展起來(lái)的一門(mén)科學(xué),其歷史可以追溯到古代,并且還有過(guò)輝煌的經(jīng)歷。但成為一門(mén)學(xué)科則是近20年來(lái)受計(jì)算機(jī)科學(xué)蓬勃發(fā)展的刺激結(jié)果。今天在計(jì)算機(jī)被廣泛應(yīng)用的信息時(shí)代,信息本身就是時(shí)間,就是財(cái)富。如何保護(hù)信息的安全(即密碼學(xué)的應(yīng)用)已不再局限于軍事、政治

12、和外交,而是擴(kuò)大到商務(wù)、金融和社會(huì)的各個(gè)領(lǐng)域。特別是在網(wǎng)絡(luò)化的今天,大量敏感信息(如考試成績(jī)、個(gè)人簡(jiǎn)歷、體檢結(jié)果、實(shí)驗(yàn)數(shù)據(jù)等)常常要通過(guò)互聯(lián)網(wǎng)進(jìn)行交換。(現(xiàn)代電子商務(wù)也是以互聯(lián)網(wǎng)為基礎(chǔ)的。)由于互聯(lián)網(wǎng)的開(kāi)放性,任何人都可以自由地接入互聯(lián)網(wǎng),使得有些不誠(chéng)實(shí)者就有可能采用各種非法手段進(jìn)行破壞。因此人們十分關(guān)心在網(wǎng)絡(luò)上交換信息的安全性。普遍認(rèn)為密碼學(xué)方法是解決信息安全保護(hù)的一個(gè)最有效和可行的方法。有效是指密碼能做到使信息不被非法竊取,不被篡改

13、或破壞,可行是說(shuō)它需要付出的代價(jià)是可以接受的。</p><p>  密碼是形成一門(mén)新的學(xué)科是在20世紀(jì)70年代。它的理論基礎(chǔ)之一應(yīng)該首推1949年Shannon的一篇文章“保密系統(tǒng)的通信理論”,該文章用信息論的觀點(diǎn)對(duì)信息保密問(wèn)題作了全面的闡述。這篇文章過(guò)了30年后才顯示出它的價(jià)值。1976年,Diffie和Hellman發(fā)表了論文《密碼學(xué)的新方向》,提出了公鑰密碼體制的新思想,這一思想引發(fā)了科技界對(duì)研究密碼學(xué)的極

14、大興趣,大量密碼學(xué)論文開(kāi)始公開(kāi)發(fā)表,改變了過(guò)去只是少數(shù)人關(guān)起門(mén)來(lái)研究密碼學(xué)的狀況。同時(shí)為了適應(yīng)計(jì)算機(jī)通信和電子商務(wù)迅速發(fā)展的需要,密碼學(xué)的研究領(lǐng)域逐漸從消息加密擴(kuò)大到數(shù)字簽名、消息認(rèn)證、身份識(shí)別、抗欺騙協(xié)議等新課題。 </p><p>  美國(guó)國(guó)家標(biāo)準(zhǔn)局(NBS)1973年開(kāi)始研究除國(guó)防部外的其它部門(mén)的計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)加密標(biāo)準(zhǔn),并批準(zhǔn)用于非機(jī)密單位及商業(yè)上的保密通信。于1973年5月15日和1974年8月27日先

15、后兩次向公眾發(fā)出了征求加密算法的公告。1977年1月,美國(guó)政府頒布:采用IBM公司1971年設(shè)計(jì)出的一個(gè)加密算法作為非機(jī)密數(shù)據(jù)的正式數(shù)據(jù)加密標(biāo)準(zhǔn)(DES : Data Encryption Standard)。DES廣泛應(yīng)用于商用數(shù)據(jù)加密,算法完全公開(kāi),這在密碼學(xué)史上是一個(gè)創(chuàng)舉。</p><p>  在密碼學(xué)的發(fā)展過(guò)程中,DES算法起了非常重要的作用。本次學(xué)年論文介紹的就是分組加密技術(shù)中最典型的加密算法——DES

16、算法。</p><p>  第1章 概 述</p><p><b>  1.1 加密與解密</b></p><p>  加密技術(shù)是基于密碼學(xué)原理來(lái)實(shí)現(xiàn)計(jì)算機(jī)、網(wǎng)絡(luò)乃至一切信息系統(tǒng)安全的理論與技術(shù)基礎(chǔ)。簡(jiǎn)單的說(shuō),加密的基本意思是改變信息的排列形式,使得只有合法的接受才能讀懂,任何他人即使截取了該加密信息也無(wú)法使用現(xiàn)有的手段來(lái)解讀。解密是我們

17、將密文轉(zhuǎn)換成能夠直接閱讀的文字(即明文)的過(guò)程稱為解密,它是加密的反向處理,但解密者必須利用相同類型的加密設(shè)備和密鑰對(duì)密文進(jìn)行解密。</p><p>  1.2 單鑰密碼系統(tǒng)</p><p>  密碼學(xué)中有兩種重要類型的密碼系統(tǒng),單鑰(私鑰)和雙鑰(公鑰)密碼系統(tǒng)。在單鑰密碼系統(tǒng)中,明文的加密和密文的解密是用同樣的密鑰。直到1976年Diffie、Hellman引入公鑰(雙鑰)密碼學(xué)之前,

18、所有的密碼都是單鑰系統(tǒng),因此單鑰系統(tǒng)也稱為傳統(tǒng)密碼系統(tǒng)。傳統(tǒng)密碼系統(tǒng)廣泛地用在今天的世界上,有兩種單鑰密碼體制:流密碼和分組密碼。</p><p>  流密碼是利用密鑰k產(chǎn)生一個(gè)密鑰流z=z0z1…,并使用如下規(guī)則對(duì)明文串x=x0x1x2…加密: y=y0y1y2…=Ez0(x0)Ez1(x1)Ez2(x2)…。密鑰流由密鑰流發(fā)生器f產(chǎn)生: zi=f(k,σi),這里σi是加密器中的記憶元件(存儲(chǔ)器)在時(shí)刻i的狀

19、態(tài),f是由密鑰k和σi產(chǎn)生的函數(shù)。</p><p>  而分組密碼就是將明文消息序列:</p><p><b>  m,m,…,m,…</b></p><p><b>  劃分為等長(zhǎng)的消息組</b></p><p>  (m,m,…m),(m,m,…,m),…</p><p>

20、;  各組明文分別在密鑰k=(k1,k2,…,kt)的控制下,按固定的算法E一組一組進(jìn)行加密。加密后輸出等長(zhǎng)密文組</p><p>  (y,…,y),(y,…,y),…</p><p>  分組密碼的模型,如圖1.1所示。</p><p>  圖1.1 分組密碼的模型</p><p>  它與流密碼的不同之處在于輸出的每一位數(shù)字不只與相應(yīng)時(shí)

21、刻輸入明文數(shù)字有關(guān),而是與一組長(zhǎng)為m的明文數(shù)組有關(guān)。它們的區(qū)別就在于有無(wú)記憶性(如圖1.2)。流密碼的滾動(dòng)密鑰z0=f(k,σ0)由函數(shù)f、密鑰k和指定的初態(tài)σ0完全確定。此后,由于輸入加密器的明文可能影響加密器中內(nèi)部記憶元件的存儲(chǔ)狀態(tài),因而σi(i>0)可能依賴于k,σ0,x0,x1,…,xi-1等參數(shù)。</p><p>  圖1.2流密碼與分組密碼的區(qū)別</p><p>  分組

22、密碼的優(yōu)點(diǎn)在于其容易實(shí)現(xiàn)同步,因?yàn)橐粋€(gè)密文組的傳輸錯(cuò)誤不會(huì)影響其他組,丟失一個(gè)明密文組不會(huì)對(duì)其后的組的解密正確性帶來(lái)影響。</p><p>  分組密碼又分為三類:代替密碼(Substitution)、移位密碼(Transposition)和乘積密碼。隨著計(jì)算技術(shù)的發(fā)展,早期的代替和移位密碼已無(wú)安全可言。一個(gè)增加密碼強(qiáng)度的顯然的方法是合并代替和移位密碼,這樣的密碼稱為乘積密碼。如果密文是由明文運(yùn)用輪函數(shù)多次而得,

23、這樣的乘積密碼又稱為迭代分組密碼。DES和今天的大多數(shù)分組密碼都是迭代分組密碼。</p><p>  目前著名的對(duì)稱分組密碼系統(tǒng)算法有DES、IDEA、Blowfish、RC4、RC5、FEAL等。</p><p>  1.3 分組密碼的總體結(jié)構(gòu)</p><p>  分組密碼采用兩種類型的總體結(jié)構(gòu):SP網(wǎng)絡(luò)與Feistel網(wǎng)絡(luò),它們的主要區(qū)別在于:SP結(jié)構(gòu)每輪改變整

24、個(gè)數(shù)據(jù)分組,而Feistel密碼每輪只改變輸入分組的一半。AES和DES分別是這兩種結(jié)構(gòu)的代表。Feistel網(wǎng)絡(luò)(又稱Feistel結(jié)構(gòu))可把任何輪函數(shù)轉(zhuǎn)化為一個(gè)置換,它是由Horst Feistel在設(shè)計(jì)Lucifer分組密碼時(shí)發(fā)明的,并因DES的使用而流行,“加解密相似”是Feistel型密碼的實(shí)現(xiàn)優(yōu)點(diǎn)。SP網(wǎng)絡(luò)(又稱SP結(jié)構(gòu))是Feistel網(wǎng)絡(luò)的一種推廣,其結(jié)構(gòu)清晰,S一般稱為混淆層,主要起混淆作用,P一般稱為擴(kuò)散層,只要起擴(kuò)

25、散作用。SP網(wǎng)絡(luò)可以更快速的擴(kuò)散,不過(guò)SP網(wǎng)絡(luò)的加解密通常不相似。</p><p>  1.4分組密碼的安全性</p><p>  安全性是分組密碼最重要的設(shè)計(jì)原則,它要求即使攻擊者知道分組密碼的內(nèi)部結(jié)構(gòu),仍不能破譯該密碼,這也意味著,不存在針對(duì)該密碼的某種攻擊方法,其工作量小于窮密鑰搜索。但是隨著密碼分析技術(shù)的發(fā)展,使得對(duì)于具有更多輪的分組密碼的破譯成為可能。</p>&l

26、t;p>  第2章 DES算法簡(jiǎn)介</p><p><b>  2.1簡(jiǎn)介</b></p><p>  DES是Data Encryption Standard(數(shù)據(jù)加密標(biāo)準(zhǔn))的縮寫(xiě)。它是由IBM公司在1971年設(shè)計(jì)出的一個(gè)加密算法,美國(guó)國(guó)家標(biāo)準(zhǔn)局(NBS)于1977年公布把它作為非機(jī)要部門(mén)使用的數(shù)據(jù)加密標(biāo)準(zhǔn)[5]。 </p><p&g

27、t;  DES自從公布以來(lái),已成為金融界及其他各種行業(yè)最廣泛應(yīng)用的對(duì)稱密鑰密碼系統(tǒng)。DES是分組密碼的典型代表,也是第一個(gè)被公布出來(lái)的標(biāo)準(zhǔn)算法。原來(lái)規(guī)定DES算法的使用期為10年,可能是DES尚未受到嚴(yán)重威脅,更主要是新的數(shù)據(jù)加密標(biāo)準(zhǔn)研制工作尚未完成,或意見(jiàn)尚未統(tǒng)一,所以當(dāng)時(shí)的美國(guó)政府宣布延長(zhǎng)它的使用期。因而DES超期服役到2000年。近三十年來(lái),盡管計(jì)算機(jī)硬件及破解密碼技術(shù)的發(fā)展日新月異,若撇開(kāi)DES的密鑰太短,易于被使用窮舉密鑰搜尋

28、法找到密鑰的攻擊法不談,直到進(jìn)入20世紀(jì)90年代以后,以色列的密碼學(xué)家Shamir等人提出一種“差分分析法”,以后日本人也提出了類似的方法,這才稱得上對(duì)它有了攻擊的方法。嚴(yán)格地說(shuō)Shamir的“差分分析法”也只是理論上的價(jià)值。至少到目前為止是這樣,比如后來(lái)的“線形逼迫法”,它是一種已知明文攻擊,需要243≈4.398×1012個(gè)明、密文對(duì),在這樣苛刻的要求下,還要付出很大的代價(jià)才能解出一個(gè)密鑰。不管是差分攻擊還是線性攻擊法,對(duì)

29、于DES的安全性也僅僅只做到了“質(zhì)疑”的地步,并未從根本上破解DES。也就是說(shuō),若是能用類似Triple-DES或是DESX的方式加長(zhǎng)密鑰</p><p>  早在DES提出不久,就有人提出造一專用的裝置來(lái)對(duì)付DES,其基本思想無(wú)非是借用硬件設(shè)備來(lái)實(shí)現(xiàn)對(duì)所有的密鑰進(jìn)行遍歷搜索。由于電子技術(shù)的突飛猛進(jìn),專門(mén)設(shè)備的造價(jià)大大降低,速度有質(zhì)的飛躍,對(duì)DES形成了實(shí)際的威脅。DES確實(shí)輝煌過(guò),它的弱點(diǎn)在于專家們一開(kāi)始就指出

30、的,即密鑰太短。美國(guó)政府已經(jīng)征集評(píng)估和判定出了新的數(shù)據(jù)加密標(biāo)準(zhǔn)AES以取代DES對(duì)現(xiàn)代分組密碼理論的發(fā)展和應(yīng)用起了奠基性的作用,它的基本理論和設(shè)計(jì)思想仍有重要參考價(jià)值。</p><p>  2.2 DES加密標(biāo)準(zhǔn)</p><p>  現(xiàn)如今,依靠Internet的分布式計(jì)算能力,用窮舉密鑰搜索攻擊方法破譯已成為可能。數(shù)據(jù)加密標(biāo)準(zhǔn)DES已經(jīng)達(dá)到它的信任終點(diǎn)。但是作為一種Feistel加密算法

31、的例子仍然有討論的價(jià)值。</p><p>  DES是對(duì)二元數(shù)字分組加密的分組密碼算法,分組長(zhǎng)度為64比特。每64位明文加密成64位密文,沒(méi)有數(shù)據(jù)壓縮和擴(kuò)展,密鑰長(zhǎng)度為56比特,若輸入64比特,則第8,16,24,32,40,48,56,64為奇偶校驗(yàn)位,所以,實(shí)際密鑰只有56位。DES算法完全公開(kāi),其保密性完全依賴密鑰。</p><p>  它的缺點(diǎn)就在于密鑰太短。</p>

32、<p>  設(shè)明文串m=m1m2…m64;密鑰串k=k1k2…k64。</p><p>  在后面的介紹中可以看到k8,k16,k24,k32,k40,k48,k56,k64實(shí)際上是不起作用的。</p><p>  DES的加密過(guò)程可表示為:</p><p>  DES(m)= IP-1T16·T15…T2·T1·IP(m)

33、.</p><p>  下面是完全16輪DES算法框圖:</p><p>  圖2.1 完全16輪DES算法</p><p>  2.2.1 初始置換IP</p><p>  初始置換是將輸入的64位明文分為8個(gè)數(shù)組,每一組包括8位,按1至64編號(hào)。</p><p>  IP的置換規(guī)則如下表:</p>&

34、lt;p>  表2.1 IP置換規(guī)則</p><p>  即將輸入的第58位換到第1位,第50位換到第2位……,依次類推,最后一位是原來(lái)的第7位。</p><p>  2.2.2 IP-1是IP的逆置換</p><p>  由于第1位經(jīng)過(guò)初始置換后,已處于第40位。逆置換就是再將第40位換回到第1位。</p><p>  逆置換規(guī)則如下

35、表所示:</p><p>  表2.2 IP-1置換</p><p>  初始置換IP及其逆置換IP-1并沒(méi)有密碼學(xué)意義,因?yàn)橹脫Q前后的一一對(duì)應(yīng)關(guān)系是已知的。它們的作用在于打亂原來(lái)輸入明文的ASCⅡ碼字劃分的關(guān)系,并將原來(lái)明文的第位m8,m16,m24,m32,m40,m48,m56,m64位(校驗(yàn)位)變成IP的輸出的一個(gè)字節(jié)。</p><p>  2.2.3 DE

36、S算法的迭代過(guò)程</p><p>  圖2.2 DES算法的迭代過(guò)程圖</p><p>  圖中Li-1和Ri-1分別是第i-1次迭代結(jié)果的左右兩部分,各32比特。即Li=Ri-1, Ri=Li-1  f(Ri-1,ki)。其中輪密鑰Ki為48比特,函數(shù)F(R,K)的計(jì)算過(guò)程如圖1.5所示。輪輸入的右半部分R為32比特,R首先被擴(kuò)展成48比特,擴(kuò)展過(guò)程由表3定義,其中將R的16個(gè)

37、比特各重復(fù)一次。擴(kuò)展后的48比特再與子密鑰Ki異或,然后再通過(guò)一個(gè)S盒,產(chǎn)生32比特的輸出。該輸出再經(jīng)過(guò)一個(gè)由表4定義的置換,產(chǎn)生的結(jié)果即為函數(shù)F(R,K)的輸出。</p><p><b>  表2.3 擴(kuò)展E</b></p><p>  ki是由64比特的初始密鑰(亦稱種子密鑰)導(dǎo)出的第i輪子密鑰,ki是48比特</p><p>  DES算

38、法的關(guān)鍵是f(Ri-1,ki)的功能,其中的重點(diǎn)又在S-盒(Substitution Boxes)上。F函數(shù)的輸出是32比特。</p><p>  圖2.3 F函數(shù)計(jì)算過(guò)程圖</p><p>  將R經(jīng)過(guò)一個(gè)擴(kuò)展運(yùn)算E變?yōu)?8位,記為E(R)。計(jì)算E(R)K=B,對(duì)B施行代換S,此代換由8個(gè)代換盒組成,即S-盒。每個(gè)S-盒有6個(gè)輸入,4個(gè)輸出,將B依次分為8組,每組6位,記B= B1B2B

39、3B4B5B6B7B8其中Bj作為第j個(gè)S-盒的輸入,其輸出為Cj,C= C1C2C3C4C5C6C7C8就是代換S的輸出,所以代換S是一個(gè)48位輸入,32位輸出的選擇壓縮運(yùn)算,將結(jié)果C再實(shí)行一個(gè)置換P(表4),即得F(R,K)。</p><p>  其中,擴(kuò)展運(yùn)算E與置換P主要作用是增加算法的擴(kuò)散效果。S-盒是DES算法中唯一的非線性部件,當(dāng)然也就是整個(gè)算法的安全性所在。它的設(shè)計(jì)原則與過(guò)程一直因?yàn)榉N種不為人知的

40、因素所限,而未被公布出來(lái)。</p><p><b>  S-盒如下表:</b></p><p>  表3.4 S-盒函數(shù)</p><p>  S-盒的置換規(guī)則為:</p><p>  取{0,1,…,15}上的4個(gè)置換,即它的4個(gè)排列排成4行,得一4*16矩陣。若給定該S盒的6個(gè)輸入為b0 b1 b2 b3 b4 b

41、5,在Si表中找出b0 b5行,b1b2 b3b4列的元素,以4位二進(jìn)制表示該元素,此為S-盒Si的輸出。</p><p>  例2.1   S2的輸入為101011,</p><p>  b1 =1,b6=1,b1 b6=(11)2=3</p><p>  (b2 b3 b4 b5)2=(0101)2=5</p><p>

42、;  查S2表可知第3行第5列的輸出是15,15的二進(jìn)制表示為1111。</p><p>  則S2的輸出為1111。8個(gè)S-盒的代換方式都是一樣的。</p><p>  S盒輸出的32比特經(jīng)P置換,P置換的功能是將32位的輸入,按以下順序置換,然后輸入仍為32比特。P置換的順序如表2.5:</p><p><b>  表2.5 置換P</b>

43、</p><p>  2.2.4 子密鑰的生成</p><p>  圖2.4 DES子密鑰生成流程圖</p><p>  圖2.4給出了子密鑰產(chǎn)生的流程圖。首先對(duì)初始密鑰經(jīng)過(guò)置換PC-1(表2.6[7]),將初始密鑰的8個(gè)奇偶校驗(yàn)位剔除掉,而留下真正的56比特初始密鑰。</p><p>  表2.6 密鑰置換PC-1</p>&

44、lt;p>  然后將此56位分為C0,D0兩部分,各28比特,C0,D0如下:</p><p>  C0=k57k49……k44k36</p><p>  D0=k63k55……k12k4</p><p>  然后分別進(jìn)行一個(gè)循環(huán)左移函數(shù)LS1,得到C1,D1,將C1(28位),D1(28位)連成56比特?cái)?shù)據(jù),再經(jīng)過(guò)密鑰置換PC-2(表2.7)做重排動(dòng)作,從而

45、便得到了密鑰K1(48位)。依次類推,便可得到K2,K3……K16。</p><p>  表2.7 密鑰置換PC-2</p><p>  其中LS1(1≤i≤16)表示一個(gè)或兩個(gè)位置的循環(huán)左移,當(dāng)i=1,2,9,16時(shí),移一個(gè)位置,當(dāng)i=3,4,5,6,7,8,10,11,12,13,14,15時(shí),移兩個(gè)位置。</p><p>  2.3 DES算法的解密過(guò)程<

46、;/p><p>  DES算法的解密過(guò)程跟加密過(guò)程是一樣的,區(qū)別僅僅在于第一次迭代時(shí)用密鑰k16,第二次k15、……,最后一次用k1,算法本身沒(méi)有任何變化。</p><p>  第3章 DES算法用C++語(yǔ)言實(shí)現(xiàn)</p><p>  3.1設(shè)置密鑰函數(shù)des_setkey()</p><p>  此函數(shù)的功能是由64比特的密鑰產(chǎn)生16個(gè)子密鑰

47、ki。首先將密鑰字節(jié)組key[8]轉(zhuǎn)換為64比特的位組,然后進(jìn)行密鑰變換PC-1(祥見(jiàn)PC-1置換表),置換后得到56比特的密鑰,把變換后的密鑰等分成兩部分,前28位記為C0, 后28位記為D0。將C0,D0進(jìn)行LS1運(yùn)算,LS1是循環(huán)左移運(yùn)算。得到C1 ,D1,最后將其進(jìn)行PC-2置換(見(jiàn)PC-2置換表),得到子密鑰k1.然后依次按循環(huán)左移LSi(I=2~16,循環(huán)次數(shù)見(jiàn)循環(huán)左移規(guī)則), PC-2置換得到k2~ k16。&l

48、t;/p><p>  void des_setkey(const char key[8]);</p><p>  static void f_func(bool in[32],const bool ki[48]);//f函數(shù)</p><p>  static void s_func(bool out[32],const bool in[48]);//s盒代替</p

49、><p><b>  //變換</b></p><p>  static void transform(bool *out, bool *in, const char *table, int len);</p><p>  static void xor(bool *ina, const bool *inb, int len);//異或</p

50、><p>  static void rotatel(bool *in, int len, int loop);//循環(huán)左移</p><p>  3.2 f函數(shù)和S函數(shù)f_func()和s_func()</p><p>  此函數(shù)的功能是DES算法的關(guān)鍵,f是將32比特的輸入轉(zhuǎn)化為32比特的輸出。</p><p>  這個(gè)兩個(gè)函數(shù)中主要用到以下函

51、數(shù):</p><p>  (1) transform()</p><p>  此函數(shù)是通用置換函數(shù),根據(jù)具體情況確定要執(zhí)行哪種置換。在f函數(shù)中,先用于E置換,然后進(jìn)行P置換。</p><p>  void transform(bool *out,bool *in,const char *table,int len)</p><p><b

52、>  {</b></p><p>  static bool tmp[256];</p><p>  for(int i=0;i<len;i++)</p><p>  tmp[i]=in[table[i]-1];</p><p>  memcpy(out,tmp,len);</p><p>&l

53、t;b>  }</b></p><p>  (2)e_table()</p><p>  E置換表,作用是將32比特的輸入擴(kuò)展為48比特。</p><p>  E輸出的48比特的數(shù)據(jù)跟生成的子密鑰進(jìn)行異或運(yùn)算,然后把得到的48比特的數(shù)據(jù)按順序分成8組,每組6比特,分別通過(guò)S1, S2 ,……,S8盒后又縮為32比特,即每盒輸入為6比特,輸出為4比特

54、。將輸出的32比特的數(shù)據(jù)經(jīng)P置換,最后得到32比特的數(shù)據(jù)。static const char e_table[48]={ 32, 1, 2, 3, 4, 5,4, 5, 6, 7, 8, 9,8, 9,10,11,12,11,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32, 1}。</p><

55、p><b> ?。?)s_box</b></p><p><b>  S盒。</b></p><p>  void s_func(bool out[32],const bool in[48])</p><p><b>  {</b></p><p>  for(char

56、i=0,j,k;i<8;i++,in+=6,out+=4)</p><p><b>  {</b></p><p>  j=(in[0]<<1)+in[5];</p><p>  k=(in[1]<<3)+(in[2]<<2)+(in[3]<<1)+in[4];</p><

57、;p>  bytetobit(out,&s_box[i][j][k],4);</p><p><b>  }</b></p><p><b>  }</b></p><p> ?。?)p_table()</p><p>  P置換表。const static char p_table[

58、32]={16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25}。</p><p><b>  (5)xor()</b></p><p>  此函數(shù)的功能是進(jìn)行異或運(yùn)算,異或運(yùn)算是按位作不進(jìn)位加法運(yùn)算。</p><p>  v

59、oid xor(bool *ina,const bool *inb,int len)</p><p><b>  {</b></p><p>  for(int i=0;i<len;i++)</p><p>  ina[i]^=inb[i];</p><p><b>  }</b></p

60、><p> ?。?) bytetobit()</p><p>  此函數(shù)的功能是將輸入的字節(jié)組轉(zhuǎn)換為位組。</p><p>  void bytetobit(bool *out,const char *in,int bits)</p><p><b>  {</b></p><p>  for(int

61、 i=0;i<bits;i++)</p><p>  out[i]=(in[i/8]>>(i%8)) &1;</p><p><b>  }</b></p><p>  與此相關(guān)的還有函數(shù)ttobyte()</p><p>  此函數(shù)的功能是將位組轉(zhuǎn)換字節(jié)組。</p><p&

62、gt;  void bittobyte(char *out,const bool *in,int bits)</p><p><b>  {</b></p><p>  memset(out,0,(bits+7)/8);</p><p>  for(int i=0;i<bits;i++)</p><p>  out

63、[i/8]|=in[i]<<(i%8);</p><p><b>  }</b></p><p>  3.3 DES算法的運(yùn)行函數(shù)des_run( )</p><p>  這個(gè)函數(shù)整個(gè)算法運(yùn)行程序的最主要部分。這個(gè)函數(shù)用于加密還是解密取決于type的類型,如果type為encrypt,則進(jìn)行加密;如果type的類型為decrypt,

64、則進(jìn)行解密。</p><p>  void des_run(char out[8],char in[8], bool type)</p><p><b>  {</b></p><p>  static bool m[64],tmp[32],*li=&m[0], *ri=&m[32];</p><p> 

65、 bytetobit(m,in,64);</p><p>  transform(m,m,ip_table,64);</p><p>  if(type==encrypt){</p><p>  for(int i=0;i<16;i++){</p><p>  memcpy(tmp,ri,32);</p><p>

66、;  f_func(ri,subkey[i]);</p><p>  xor(ri,li,32);</p><p>  memcpy(li,tmp,32);</p><p><b>  }</b></p><p><b>  }else{</b></p><p>  for(

67、int i=15;i>=0;i--){</p><p>  memcpy(tmp,li,32);</p><p>  f_func(li,subkey[i]);</p><p>  xor(li,ri,32);</p><p>  memcpy(ri,tmp,32);</p><p><b>  }&l

68、t;/b></p><p><b>  }</b></p><p>  transform(m,m,ipr_table,64);</p><p>  bittobyte(out,m,64);</p><p><b>  }</b></p><p>  這個(gè)函數(shù)用到以下函

69、數(shù):</p><p> ?。?) bytetobit()</p><p>  此函數(shù)的功能是將輸入的字節(jié)組轉(zhuǎn)換為位組。</p><p> ?。?) transform()</p><p>  此函數(shù)是通用置換函數(shù),根據(jù)具體情況確定要執(zhí)行哪種置換。</p><p> ?。?) memcpy()</p>&l

70、t;p>  此函數(shù)是庫(kù)函數(shù),主要作用是進(jìn)行內(nèi)存單元的復(fù)制。</p><p> ?。?) f_func()</p><p>  此函數(shù)是des_run()函數(shù)運(yùn)行的關(guān)鍵,是將32比特的輸入轉(zhuǎn)化為32比特的輸出</p><p><b>  (5)xor()</b></p><p>  此函數(shù)的功能是進(jìn)行異或運(yùn)算,異或運(yùn)

71、算是按位作不進(jìn)位加法運(yùn)算。</p><p> ?。?)bittobyte()</p><p>  此函數(shù)的功能是將位組轉(zhuǎn)換字節(jié)組。</p><p>  3.4 DES算法的主函數(shù)void main()</p><p><b>  主函數(shù)的流程:</b></p><p>  void main()&

72、lt;/p><p><b>  {</b></p><p>  char key[8]={'p','r','o','g','r','a','m'},str[8];</p><p>  puts("****************

73、*DES***********************");</p><p>  printf("\n");</p><p>  printf("\n");</p><p>  puts("please input your words");</p><p>  gets(

74、str);</p><p>  printf("\n");</p><p>  puts("****************************************");</p><p>  des_setkey(key);</p><p>  des_run(str,str,encrypt);

75、</p><p>  puts("after encrypting:");</p><p>  puts(str);</p><p>  printf("\n");</p><p>  puts("****************************************");

76、</p><p>  puts("after decrypting:");</p><p>  des_run(str,str,decrypt);</p><p>  puts(str);</p><p>  printf("\n");</p><p>  puts("

77、****************************************");</p><p>  printf("\n");</p><p><b>  }</b></p><p>  此函數(shù)貫穿整個(gè)函數(shù)。首先是初設(shè)密鑰,然后調(diào)用密鑰設(shè)置函數(shù)des_setkey()和DES算法的運(yùn)行函數(shù)des_run()

78、,最后得出密文以及解密后的文字。</p><p>  3.5 DES的加密過(guò)程和舉例</p><p>  設(shè)明文m=computer,密鑰k為program,它們用ASCII碼表示為:</p><p>  m= 01100011   01101111   01101101   01110000</p&

79、gt;<p>  01110101   01110100   01100101   01110010</p><p>  k= 01110000   01110010   01101111   01100111</p><p>  01110010 

80、;   01101101   01101101</p><p>  這里的k只有56位,由于第8,16,24,32,40,48,58,64位不起作用,所以沒(méi)有賦值。也就是其中的k8 k16 k24 k32 k40 k48 k56 k64不起作用。其中的密鑰為64比特如下:</p><p>  k=0111000*0011100*1001101*111

81、0110*</p><p>  0111011*1001001*1000010*1101101*</p><p>  在這里密鑰K是在主函數(shù)中已設(shè)定,所以在程序運(yùn)行時(shí)只輸入明文就可以了。</p><p>  密鑰k經(jīng)過(guò)PC-1置換后,分成兩組C0,D0??傻?lt;/p><p>  C0=11101100   10011001

82、   00011011   1011</p><p>  D0=10110100   01011000   10001110   0111</p><p>  C0,D0 分別進(jìn)行循環(huán)左移運(yùn)算,得到C1,D1。</p><p>  C1=11011001 &

83、#160; 00110010   00110111   0111</p><p>  D1=01101000   10110001   00011100   1111</p><p>  依次類推,C1,D1繼續(xù)進(jìn)行循環(huán)左移,最后得到C2,D2進(jìn)行循環(huán)左移,得到C3,D3……C16,D16。

84、</p><p>  C1,D1進(jìn)行PC-2置換,得到密鑰k1,可得:</p><p>  K1=00111101   10001111    11001101   00110111   00111111    01001000</p><p> 

85、 依次類推,C2,D2進(jìn)行PC-2置換,得到密鑰k2, C3,D3進(jìn)行PC-2置換得到k3,……C16,D16進(jìn)行PC-2置換得到k16。</p><p>  明文M進(jìn)行IP置換后,分成兩組:L0,R0,可得:</p><p>  L0=11111111    10111000   01110110   01010111

86、</p><p>  R0=00000000   11111111   00000110    10000011</p><p>  R0進(jìn)行E膨脹后,與密鑰k1進(jìn)行異或運(yùn)算,得到48比特的數(shù)據(jù)</p><p>  S=10111101   10011000 

87、0; 00110011   10110111   11101011   01001110</p><p>  將這些數(shù)據(jù)分別裝入S盒:</p><p> ?。?)    101111進(jìn)入S1,從S1的第3行第7列的元素7,可知其輸出為0111</p><p> ?。?)

88、0;   011001進(jìn)入S2,從S2的第1行第12列的元6,可知其輸出為0110</p><p> ?。?)    100000進(jìn)入S3,從S3的第2行第0列的元素13,可知其輸出為1101</p><p> ?。?)    110011進(jìn)入S4,從S4的第3行第9列的元素4,可知其輸出為0100</p

89、><p> ?。?)    101101進(jìn)入S5,從S5的第3行第6列的元素2,可知其輸出為0010</p><p> ?。?)    111110進(jìn)入S6,從S6的第2行第15列的元素6,可知其輸出為0100</p><p> ?。?)    101101進(jìn)入S7,從S7的第3行

90、第6列的元素10,可知其輸出為1010</p><p> ?。?)    001110進(jìn)入S8,從S8的第0行第7列的元素1,可知其輸出為0001</p><p>  故8個(gè)S盒的輸出為:</p><p>  01110110   11010100   00100110  &#

91、160; 10100001</p><p>  最后通過(guò)P得f(R0,k1)為:</p><p>  01110110   11010100   00100110   10100001</p><p>  L0   f(R0,k1)得到R1:</p><p>  

92、R1=10111011   10011001   11101001   11001100</p><p>  L1= R0=00000000     11111111    00000110    10000011</p><p>

93、  經(jīng)過(guò)16輪的迭代最后得到:</p><p>  L16= R15=01010010   10011000   11000001    01011010</p><p>  R16=11101000   10000011   01111000   &

94、#160; 01001100</p><p>  最后經(jīng)過(guò)IP逆置換后得到密文如下:</p><p>  00100100    01100001     00000010     10011011     01011001 

95、60;   10001000     11001111     10110100</p><p>  3.6 DES算法的分析</p><p>  DES算法具有極高安全性,最初,除了用窮舉搜索法對(duì)DES算法進(jìn)行攻擊外,并沒(méi)有發(fā)現(xiàn)更有效的辦法。而56位長(zhǎng)的密鑰的窮舉空間為256,這意味著

96、如果一臺(tái)計(jì)算機(jī)的速度是每一秒種檢測(cè)一百萬(wàn)個(gè)密鑰,則它搜索完全部密鑰就需要將近2285年的時(shí)間,可見(jiàn),這是難以實(shí)現(xiàn)的,當(dāng)然,隨著科學(xué)技術(shù)的發(fā)展,當(dāng)出現(xiàn)超高速計(jì)算機(jī)后,我們可考慮把DES密鑰的長(zhǎng)度再增長(zhǎng)一些,以此來(lái)達(dá)到更高的保密程度。</p><p>  在DES算法作為一個(gè)標(biāo)準(zhǔn)時(shí),曾出現(xiàn)過(guò)許多的批評(píng),其中之一就是針對(duì)S盒的。DES里的所有計(jì)算,除去S盒全是線性的,也就是說(shuō),計(jì)算兩個(gè)輸出的異或與先將兩個(gè)對(duì)應(yīng)輸入異或再

97、計(jì)算其輸出是相同的。作為非線性部件,S盒針對(duì)密碼體制的安全性至關(guān)重要。在算法提出時(shí),就有人懷疑S盒隱藏了“陷門(mén)”。而美國(guó)國(guó)家安全局能夠輕易的解密消息,同時(shí)還能宣稱DES算法是“安全”的。當(dāng)然無(wú)法否認(rèn)這一猜測(cè),然而到目前為止,并沒(méi)有任何證據(jù)證明DES里的確存在陷門(mén)。</p><p>  事實(shí)上,后來(lái)表明DES里的S盒是被設(shè)計(jì)成能夠防止某些類型的攻擊的。在20世紀(jì)90年代初,Biham與Shamir發(fā)現(xiàn)差分分析時(shí),美

98、國(guó)國(guó)家安全局就已承認(rèn)某些未公布的S盒設(shè)計(jì)原則正是為了使得差分密碼分析變得不可行。事實(shí)上,差分密碼分析在DES最初被研發(fā)時(shí)就已成為IBM的研究者所知,但這種方法卻被保留了將近20年,直到Biham與Shamir又獨(dú)立地發(fā)現(xiàn)了這種攻擊。</p><p>  對(duì)DES算法最中肯的批評(píng)是,密鑰太短。DES算法中只用到64位密鑰中的其中56位,第8、16、24、......64位8個(gè)位并未參與DES運(yùn)算,而是用作奇偶校驗(yàn)。

99、在所有的密鑰空間中有極少量的弱密鑰,如全0和全F的密鑰等,在選擇時(shí)應(yīng)盡量避免。這一點(diǎn),向我們提出了一個(gè)應(yīng)用上的要求,即DES的安全性是基于除了8,16,24,......64位外的其余56位的組合變化256才得以保證的。因此,在實(shí)際應(yīng)用中,我們應(yīng)避開(kāi)使用第8,16,24,......64位作為有效數(shù)據(jù)位,而使用其它的56位作為有效數(shù)據(jù)位,才能保證DES算法安全可靠地發(fā)揮作用。如果不了解這一點(diǎn),把密鑰Key的8,16,24,..... .

100、64位作為有效數(shù)據(jù)使用,將不能保證DES加密數(shù)據(jù)的安全性,對(duì)運(yùn)用DES來(lái)達(dá)到保密作用的系統(tǒng)產(chǎn)生數(shù)據(jù)被破譯的危險(xiǎn),這正是DES算法在應(yīng)用上的誤區(qū),留下了被人攻擊、被人破譯的極大隱患??傊珼ES密鑰太短,超期服役的時(shí)間也太長(zhǎng)。新的攻擊手段不斷出現(xiàn),DES以面臨實(shí)實(shí)在在的威脅。直接的威脅還是在于專用設(shè)備,由于芯片的速度越來(lái)越快,造價(jià)越來(lái)越便宜,導(dǎo)致專用設(shè)備的造價(jià)也大大的降低。</p><p>  DES算法除了差分密

101、碼分析另外兩種最重要的密碼攻擊是窮盡密鑰搜索和線性密碼分析。對(duì)DES算法而言,線性攻擊更有效。在1994年,一個(gè)實(shí)際的線性密碼分析由其發(fā)明者M(jìn)atsui提出。這是一個(gè)使用243對(duì)明文-密文,又用了40天來(lái)找到密鑰。這個(gè)密碼分析并未對(duì)DES的安全性產(chǎn)生實(shí)際影響,由于這個(gè)攻擊需要數(shù)目極大的明-密文對(duì),在現(xiàn)實(shí)世界中一個(gè)敵手很難積攢下用同一密鑰加密的如此眾多的明-密文對(duì)。</p><p>  雖然DES加密算法已經(jīng)過(guò)時(shí),

102、但它的基本理論和設(shè)計(jì)思想仍有重要參考價(jià)值。</p><p><b>  結(jié) 論</b></p><p>  經(jīng)過(guò)一個(gè)多月的學(xué)習(xí),在老師和同學(xué)的支持與幫助之下,我順利地完成了這次論文設(shè)計(jì)。使我對(duì)DES加密算法有了一定的了解,隨著Internet的高速發(fā)展和應(yīng)用,其安全越來(lái)越引起人們的關(guān)注、如何保護(hù)企業(yè)和個(gè)人在網(wǎng)絡(luò)上的敏感信息不受侵犯己成為當(dāng)前擺在人們面前的一個(gè)重大問(wèn)題。

103、加密作為一種用來(lái)保護(hù)用戶內(nèi)部第一道安全屏障,始終受到人們的關(guān)注和重視,并成為網(wǎng)絡(luò)安全產(chǎn)品的首選。</p><p>  從當(dāng)初確定題目到最后一個(gè)功能模塊的完成,經(jīng)歷了無(wú)數(shù)次的錯(cuò)誤、修改代碼、重啟服務(wù)器、運(yùn)行的過(guò)程,感覺(jué)到平時(shí)學(xué)的知識(shí)是多么的淺薄,書(shū)到用時(shí)方恨少,現(xiàn)在是體驗(yàn)的真真切切。本來(lái)已經(jīng)耳熟能詳?shù)拇a,一到IDE中書(shū)寫(xiě),卻提筆忘字,這充分的反應(yīng)了我平時(shí)的基本功不扎實(shí),常用代碼的不熟練。給我以后的工作敲響了警鐘,

104、有了努力的方向。</p><p>  本次設(shè)計(jì)是我工作前一次很好的演練和實(shí)踐的機(jī)會(huì),是培養(yǎng)獨(dú)立思考問(wèn)題和自學(xué)能力的鍛煉,使我意識(shí)到必須努力的學(xué)習(xí)才能在工作中體現(xiàn)自己的價(jià)值,適應(yīng)社會(huì)的需要。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]Richard Spillman著,葉阮健,曹英,張長(zhǎng)富譯.經(jīng)典密碼學(xué)與現(xiàn)代密碼學(xué).

105、北京:清華大學(xué)出版社,2005,124-133.</p><p>  [2]Oded Goldreich.Foundations of Cryptography Volume Ⅱ Basic Applications[M],BEIJING:Publishing House of Electronics Industry,2005年, 375-379.</p><p>  [3]賴溪松,韓亮

106、,張真誠(chéng)著.計(jì)算機(jī)密碼學(xué)及其應(yīng)用[M].北京:國(guó)防工業(yè)出版社,2007, 43-49.</p><p>  [4]D.Coppersmith, The Data Encryption Standard (DES) and its strength against attacks[J].IBM Journal of Research and Development, 38(3),.243-250.</p>

107、;<p>  [5]孫淑玲編著,應(yīng)用密碼學(xué).北京:清華大學(xué)出版社,2004年, 11-19.</p><p>  [6]K.Campbell and M.Wiener, DES is not a group,Advances in Cryptology-CRYPTO ’92,Lecture Notes in Computer Science 740,Springer-Verlag,1993, 512

108、-520.</p><p>  [7]盧開(kāi)橙編著.計(jì)算機(jī)密碼學(xué)—計(jì)算機(jī)網(wǎng)絡(luò)中的數(shù)據(jù)保密與安全[M].北京:清華大學(xué)出版社,2003年,.38-48.</p><p><b>  致 謝</b></p><p>  歲月如梭,4年匆匆而過(guò),不知不覺(jué)已經(jīng)走到了最后的路口。相對(duì)于2年前那些迷茫的眼神,現(xiàn)在的我有著更多的堅(jiān)強(qiáng)與理智,而帶給我這些巨大變化

109、的正式我們辛勤耕耘的老師們?!霸粕缴n蒼,江水泱泱,先生之風(fēng),山高水長(zhǎng)。”</p><p>  回首我4年的求學(xué)歷程,無(wú)一不有著老師們的心血,無(wú)論是起步的《計(jì)算機(jī)文化基礎(chǔ)》,嚴(yán)謹(jǐn)?shù)摹陡叩葦?shù)學(xué)》,還是更深一層的《數(shù)據(jù)庫(kù)》、《C語(yǔ)言》,老師們無(wú)一不在用自己的臂膀托起我們明天的希望,他們毫不保留的奉獻(xiàn)自己全部的知識(shí)與精力,對(duì)我們襟懷無(wú)私、諄諄教誨,傾心吐露,唯恐不盡。而同時(shí),他們也用自己的行動(dòng)和人格的力量,教會(huì)我們做人的

110、道理,指引我們前進(jìn)的方向。時(shí)間總是飛逝而過(guò),現(xiàn)在的我們即將離開(kāi)老師的庇護(hù),帶著老師對(duì)我們的殷切希望走向自己的工作崗位,去打拼屬于自己的一片天空。但是先生之風(fēng),定會(huì)永遠(yuǎn)作為我們行動(dòng)的指南,陪伴激勵(lì)我們向著更高、更快、更強(qiáng)的目標(biāo)奮斗。 </p><p>  本論文是在我的導(dǎo)師張麗麗老師的悉心指導(dǎo)下完成的,張麗麗老師學(xué)識(shí)淵博,勤奮好學(xué),工作嚴(yán)謹(jǐn),待人誠(chéng)懇,令

111、我十分敬佩。我從張麗麗老師的身上學(xué)到的不僅是先進(jìn)的計(jì)算機(jī)方面的專業(yè)知識(shí),他的優(yōu)秀的學(xué)習(xí)和工作作風(fēng)、嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度以及高尚的品質(zhì)更使我受益匪淺。作為張麗麗老師帶的畢業(yè)設(shè)計(jì)學(xué)生,我很高興,真的。</p><p><b>  附 錄</b></p><p>  DES算法用C++實(shí)現(xiàn)的源代碼</p><p>  用C++實(shí)現(xiàn)的源代碼</p>

112、;<p>  #include "memory.h"</p><p>  #include "stdio.h"</p><p>  enum  {encrypt,decrypt};//ENCRYPT:加密,DECRYPT:解密</p><p>  void des_run(char out[8],cha

113、r in[8],bool type=encrypt);</p><p><b>  //設(shè)置密鑰</b></p><p>  void des_setkey(const char key[8]);</p><p>  static void f_func(bool in[32],const bool ki[48]);//f函數(shù)</p>

114、;<p>  static void s_func(bool out[32],const bool in[48]);//s盒代替</p><p><b>  //變換</b></p><p>  static void transform(bool *out, bool *in, const char *table, int len);</p>

115、;<p>  static void xor(bool *ina, const bool *inb, int len);//異或</p><p>  static void rotatel(bool *in, int len, int loop);//循環(huán)左移</p><p>  //字節(jié)組轉(zhuǎn)換成位組</p><p>  static void byt

116、etobit(bool *out,const char *in, int bits);</p><p>  //位組轉(zhuǎn)換成字節(jié)組</p><p>  static void bittobyte(char *out, const bool *in, int bits);</p><p><b>  //置換IP表</b></p>&

117、lt;p>  conststatic char ip_table[64]={58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,1

118、5,7};</p><p>  //逆置換IP-1表</p><p>  const static char ipr_table[64]={40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,

119、 51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25};</p><p><b>  //E 位選擇表</b></p><p>  static const char e_table[48]={32,1, 2, 3, 4, 5,4, 5, 6, 7, 8, 9,8, 9, 10,11,12,13,

120、12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32,1};</p><p><b>  //P換位表</b></p><p>  const static char p_table[32]={16,7,20,21,29,12,28,17,1,15,

溫馨提示

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