網(wǎng)絡(luò)與信息安全課程設(shè)計(jì)報(bào)告-加密軟件設(shè)計(jì).doc

上傳人:good****022 文檔編號(hào):116445372 上傳時(shí)間:2022-07-05 格式:DOC 頁數(shù):21 大小:168KB
收藏 版權(quán)申訴 舉報(bào) 下載
網(wǎng)絡(luò)與信息安全課程設(shè)計(jì)報(bào)告-加密軟件設(shè)計(jì).doc_第1頁
第1頁 / 共21頁
網(wǎng)絡(luò)與信息安全課程設(shè)計(jì)報(bào)告-加密軟件設(shè)計(jì).doc_第2頁
第2頁 / 共21頁
網(wǎng)絡(luò)與信息安全課程設(shè)計(jì)報(bào)告-加密軟件設(shè)計(jì).doc_第3頁
第3頁 / 共21頁

下載文檔到電腦,查找使用更方便

20 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《網(wǎng)絡(luò)與信息安全課程設(shè)計(jì)報(bào)告-加密軟件設(shè)計(jì).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《網(wǎng)絡(luò)與信息安全課程設(shè)計(jì)報(bào)告-加密軟件設(shè)計(jì).doc(21頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、網(wǎng)絡(luò)與信息安全課程設(shè)計(jì)報(bào)告網(wǎng)絡(luò)與信息安全課程設(shè)計(jì)報(bào)告 班級(jí): 學(xué)號(hào):姓名:題目:加密軟件設(shè)計(jì)評(píng)閱:成績:目錄摘要21 數(shù)據(jù)加密概述及DES算法由來31.1 數(shù)據(jù)加密概述31.2 DES算法由來32 DES算法原理及算法實(shí)現(xiàn)42.1 DES算法原理42.2 DES算法詳述62.3利用C語言實(shí)現(xiàn)DES算法93 DES的應(yīng)用誤區(qū)及加密軟件的實(shí)現(xiàn)193.1 DES的應(yīng)用誤區(qū)193.2 加密軟件的實(shí)現(xiàn)19參考資料:20摘要密碼學(xué)是網(wǎng)絡(luò)安全的基礎(chǔ),在安全領(lǐng)域密碼學(xué)是最主要的分支之一,眾多的網(wǎng)絡(luò)安全技術(shù)都是基于密碼學(xué)的。數(shù)據(jù)加密是所有數(shù)據(jù)安全技術(shù)的核心,其在網(wǎng)絡(luò)上的作用是防止重要的或私有化信息在網(wǎng)絡(luò)上截獲或

2、篡改。目前,數(shù)據(jù)加密技術(shù)已經(jīng)被普遍應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)信息的安全管理中。本次課程設(shè)計(jì)即使要完成一項(xiàng)加密軟件的設(shè)計(jì),利用DES算法,通過編寫源代碼,調(diào)試和運(yùn)行序完成加密解密的實(shí)現(xiàn),最后實(shí)現(xiàn)加密軟件界面。本人利用C語言編寫程序,主要完成的任務(wù)是搜集加密技術(shù)的相關(guān)資料,程序的編寫調(diào)試,以及最后的軟件實(shí)現(xiàn)。 關(guān)鍵字:數(shù)據(jù)加密,DES算法,程序設(shè)計(jì),網(wǎng)絡(luò)安全1 數(shù)據(jù)加密概述及DES算法由來1.1 數(shù)據(jù)加密概述 在互聯(lián)網(wǎng)上進(jìn)行文件、電子商務(wù)往來等信息傳輸時(shí)存在許多不安全因素,尤其是一些機(jī)密文件在網(wǎng)絡(luò)傳輸時(shí),信息安全顯得尤其重要。不安全性是互聯(lián)網(wǎng)的存在基礎(chǔ)TCP/IP協(xié)議所固有的,因此解決這一問題的方案就是加密

3、,加密后的數(shù)據(jù)被別人獲取后,在解密之前是不可讀的。 加密的目的是防止機(jī)密信息泄露,同時(shí)還可以用于驗(yàn)證信息源的真實(shí)性,驗(yàn)證所接受到的數(shù)據(jù)的完整性。通常將加密前的原始數(shù)據(jù)或消息稱為明文,經(jīng)過加密得到的代碼稱為密文。數(shù)據(jù)加密的逆過程稱為數(shù)據(jù)解密,即將密文轉(zhuǎn)化為明文的過程。只有利用相應(yīng)的密鑰對(duì)密文進(jìn)行解密,才能夠顯示明文的內(nèi)容,通過這樣的途徑能夠保護(hù)數(shù)據(jù)不被非授權(quán)的訪問者非法竊取。加密技術(shù)通常分為兩大類:常規(guī)密鑰密碼體制和公開密鑰密碼體制。所謂常規(guī)密鑰密碼體制,是指加密密鑰與解密密鑰相同的密碼體制。這種加密系統(tǒng)又稱為對(duì)稱密鑰系統(tǒng)。美國政府采用的DES加密標(biāo)準(zhǔn)就是一種典型的對(duì)稱式加密算法。公開密鑰密碼體

4、制使用不同的加密密鑰和解密密鑰,采用非對(duì)稱的加密算法,RSA算法就是其中使用最廣泛的算法之一。1.2 DES算法由來美國國家標(biāo)準(zhǔn)局1973年開始研究除國防部門外的其他部門的計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)加密標(biāo)準(zhǔn),于1973年5月15日和1974年8月27日先后兩次向公眾征求加密算法的公告。加密算法要達(dá)到的目的(通常稱為DES密碼算法要求)主要為以下四點(diǎn):(1) 提供高質(zhì)量的數(shù)據(jù)保護(hù),防止數(shù)據(jù)未經(jīng)授權(quán)的泄漏和未被察覺的修改;(2) 具有相當(dāng)高的復(fù)雜性,使得破譯的開銷超過可能獲得的利益,同時(shí)又要便于理解和掌握;(3) DES密碼體制的安全性應(yīng)該不依賴于算法的保密,其安全性僅以加密密鑰的保密為基礎(chǔ);(4) 實(shí)現(xiàn)經(jīng)

5、濟(jì),運(yùn)行有效,并且適用于多種不同的應(yīng)用。1977年1月,美國政府正式許可以IBM公司設(shè)計(jì)的方案作為非機(jī)密數(shù)據(jù)的數(shù)據(jù)加密標(biāo)準(zhǔn)(Data Encryption Standard,DES)。DES算法已經(jīng)應(yīng)用于許多需要安全加密的場合,UNIX的密碼保護(hù)算法就是以DES算法為基礎(chǔ)的。2 DES算法原理及算法實(shí)現(xiàn)2.1 DES算法原理DES是一個(gè)分組加密算法(如圖2-1)。 明文按64位進(jìn)行分組,密匙長64位,密鑰事實(shí)上是56位參與DES運(yùn)算(第8、16、24、32、40、48、56、64位是校驗(yàn)位, 使得每個(gè)密鑰都有奇數(shù)個(gè)1)分組后的明文組和56位的密鑰按位替代或交換的方法形成密文組的加密方法。圖2-

6、1 對(duì)稱密碼體制分組密碼加密示意圖DES算法是這樣工作的:如Mode為加密,則用Key 去把數(shù)據(jù)Data進(jìn)行加密, 生成Data的密碼形式(64位)作為DES的輸出結(jié)果;如Mode為解密,則用Key去把密碼形式的數(shù)據(jù)Data解密,還原為Data的明碼形式(64位)作為DES的輸出結(jié)果。在通信網(wǎng)絡(luò)的兩端,雙方約定一致的Key,在通信的源點(diǎn)用Key對(duì)核心數(shù)據(jù)進(jìn)行DES加密,然后以密碼形式在公共通信網(wǎng)(如電話網(wǎng))中傳輸?shù)酵ㄐ啪W(wǎng)絡(luò)的終點(diǎn),數(shù)據(jù)到達(dá)目的地后,用同樣的Key對(duì)密碼數(shù)據(jù)進(jìn)行解密,便再現(xiàn)了明碼形式的核心數(shù)據(jù)。這樣,便保證了核心數(shù)據(jù)(如PIN、MAC等)在公共通信網(wǎng)中傳輸?shù)陌踩院涂煽啃?。簡單?/p>

7、說,算法只不過是加密的兩個(gè)基本技術(shù)混亂和擴(kuò)散的組合。DES基本組建分組是這些技術(shù)的一個(gè)組合(先替代后置換)。它基于密鑰作用于明文,這就是眾所周知的輪。DES有16輪,這意味著在明文分組上16次實(shí)施相同的組合技術(shù),如圖2-2所示。在圖2-2中,DES對(duì)64bit的明文分組進(jìn)行操作。通過一個(gè)初始置換,將明文分為左半部分和右半部分,各為32bit長。然后進(jìn)行16輪完全相同的迭代,在迭代過程中數(shù)據(jù)與密鑰結(jié)合。經(jīng)過16輪后,左、右部分合在一起經(jīng)過一個(gè)逆置換,該算法就完成了。DES加密算法特點(diǎn):分組比較短、密鑰太短、密碼生命周期短、運(yùn)算速度較慢。圖2-2 DES算法示意圖2.2 DES算法詳述 DES算法

8、把64位的明文輸入塊變?yōu)?4位的密文輸出塊,它所使用的密鑰也是64位,其功能是把輸入的64位數(shù)據(jù)塊按位重新組合,并把輸出分為L0、R0兩部分,每部分各長32位,其置換規(guī)則見下表:58,50,12,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,15,7,即將輸入的第58位換到第一位,第50位換到第2位,.,

9、依此類推,最后一位是原來的第7位。L0、R0則是換位輸出后的兩部分,L0是輸出的左32位,R0 是右32位,例:設(shè)置換前的輸入值為D1D2D3.D64,則經(jīng)過初始置換后的結(jié)果為:L0=D550.D8;R0=D57D49.D7。經(jīng)過26次迭代運(yùn)算后。得到L16、R16,將此作為輸入,進(jìn)行逆置換,即得到密文輸出。逆置換正好是初始置的逆運(yùn)算,例如,第1位經(jīng)過初始置換后,處于第40位,而通過逆置換,又將第40位換回到第1位,其逆置換規(guī)則如下表所示: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,1

10、3,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58 26,33,1,41, 9,49,17,57,25,放大換位表32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10,11,12,13,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,單純換位表16,7,20,21,29,12,28,17, 1,15,23,26, 5,1

11、8,31,10,2,8,24,14,32,27, 3, 9,19,13,30, 6,22,11, 4,25,在f(Ri,Ki)算法描述圖中,S1,S2.S8為選擇函數(shù),其功能是把6bit數(shù)據(jù)變?yōu)?bit數(shù)據(jù)。下面給出選擇函數(shù)Si(i=1,2.8)的功能表:選擇函數(shù)SiS1:14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,S2:15,1,8,1

12、4,6,11,3,4,9,7,2,13,12,0,5,10,3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,S3:10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,S

13、4:7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,S5:2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,11,8,12,7,1,14,2,13,6,15,0,9,

14、10,4,5,3,S6:12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,S7:4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,6,11,13,8,1,4,10,7,

15、9,5,0,15,14,2,3,12,S8:13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11,在此以S1為例說明其功能,我們可以看到:在S1中,共有4行數(shù)據(jù),命名為0,1、2、3行;每行有16列,命名為0、1、2、3,.,14、15列?,F(xiàn)設(shè)輸入為: DD1D2D3D4D5D6令:列D2D3D4D5行D1D6然后在S1表中查得對(duì)應(yīng)的數(shù),以4位二進(jìn)

16、制表示,此即為選擇函數(shù)S1的輸出。下面給出子密鑰Ki(48bit)的生成算法從子密鑰Ki的生成算法描述圖中我們可以看到:初始Key值為64位,但DES算法規(guī)定,其中第8、16、.64位是奇偶校驗(yàn)位,不參與DES運(yùn)算。故Key 實(shí)際可用位數(shù)便只有56位。即:經(jīng)過縮小選擇換位表1的變換后,Key 的位數(shù)由64 位變成了56位,此56位分為C0、D0兩部分,各28位,然后分別進(jìn)行第1次循環(huán)左移,得到C1、D1,將C1(28位)、D1(28位)合併得到56位,再經(jīng)過縮小選擇換位2,從而便得到了密鑰K0(48位)。依此類推,便可得到K1、K2、.、K15,不過需要注意的是,16次循環(huán)左移對(duì)應(yīng)的左移位數(shù)要

17、依據(jù)下述規(guī)則進(jìn)行:循環(huán)左移位數(shù)1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1以上介紹了DES算法的加密過程。DES算法的解密過程是一樣的,區(qū)別僅僅在于第一次迭代時(shí)用子密鑰K15,第二次K14、.,最后一次用K0,算法本身并沒有任何變化。2.3利用C語言實(shí)現(xiàn)DES算法 /* Provided by wangjunchuan, Northeastern University */#include #include #include / 初始置換表const static char IP_Table64 = 58, 50, 42, 34, 26, 18, 10, 2, 60, 52,

18、 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, 15, 7;/ 逆初始置換表const static char IPR_Table64 = 40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23,

19、 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, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25;/ 擴(kuò)展置換表static const char Extension_Table48 = 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12,

20、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盒置換表const static char P_Table32 = 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;/ 密鑰置換表 const static char PCK_Tabl

21、e56 = 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18,10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36,63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22,14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4;/ 壓縮置換表 const static char PCC_Table48 = 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10

22、,23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2,41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48,44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32;/ 每輪移動(dòng)的位數(shù) const static char LOOP_Table16 = 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1;/ S盒設(shè)計(jì)const static char S_Box8416 = / S盒1 14, 4, 13,1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9

23、, 0, 7, 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13,/ S盒2 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, 0, 14, 7, 11, 10,

24、 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9,/ S盒3 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11,

25、5, 2, 12,/ S盒4 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14,/ S盒5 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,14, 11, 2, 12

26、, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3,/ S盒6 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10,

27、 1, 13, 11, 6, 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13,/ S盒7 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12,/ S盒8 13, 2,

28、 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11;typedef bool (*PSubKey)1648;enum ENCRYPT,DECRYPT;static bool SubKey21648;/ 16圈子密鑰static boo

29、l Is3DES;/ 3次DES標(biāo)志static char Tmp256, deskey16;/*static void DES(char Out8, char In8, const PSubKey pSubKey, bool Type);/標(biāo)準(zhǔn)DES加/解密static void SetKey(const char* Key, int len);/ 設(shè)置密鑰static void SetSubKey(PSubKey pSubKey, const char Key8);/ 設(shè)置子密鑰static void F_func(bool In32, const bool Ki48);/ f 函數(shù)sta

30、tic void S_func(bool Out32, const bool In48);/ S 盒代替static void Transform(bool *Out, bool *In, const char *Table, int len);/ 變換static void Xor(bool *InA, const bool *InB, int len);/ 異或static void RotateL(bool *In, int len, int loop);/ 循環(huán)左移static void ByteToBit(bool *Out, const char *In, int bits);/

31、字節(jié)組轉(zhuǎn)換成位組static void BitToByte(char *Out, const bool *In, int bits);/ 位組轉(zhuǎn)換成字節(jié)組/ TypeENCRYPT:加密,DECRYPT:解密/ 輸出緩沖區(qū)(Out)的長度 = (datalen+7)/8)*8,即比datalen大的且是8的倍數(shù)的最小正整數(shù)/ In 可以= Out,此時(shí)加/解密后將覆蓋輸入緩沖區(qū)(In)的內(nèi)容/ 當(dāng)keylen8時(shí)系統(tǒng)自動(dòng)使用3次DES加/解密,否則使用標(biāo)準(zhǔn)DES加/解密.超過16字節(jié)后只取前16字節(jié)bool DES_Act(char *Out,char *In,long datalen,con

32、st char *Key,int keylen,bool Type = ENCRYPT);*/ 字節(jié)轉(zhuǎn)換函數(shù)void ByteToBit(bool *Out, const char *In, int bits) for(int i=0; i3(i&7) & 1;/ 比特轉(zhuǎn)換函數(shù)void BitToByte(char *Out, const bool *In, int bits) memset(Out, 0, bits3); for(int i=0; i3 |= Ini(i&7);/ 變換函數(shù)void Transform(bool *Out, bool *In, const char *Tabl

33、e, int len) for(int i=0; ilen; +i) Tmpi = In Tablei-1 ; memcpy(Out, Tmp, len);/ 異或函數(shù)的實(shí)現(xiàn)void Xor(bool *InA, const bool *InB, int len) for(int i=0; ilen; +i) InAi = InBi;/ 輪轉(zhuǎn)函數(shù)void RotateL(bool *In, int len, int loop) memcpy(Tmp, In, loop); memcpy(In, In+loop, len-loop); memcpy(In+len-loop, Tmp, loop)

34、;/ S函數(shù)的實(shí)現(xiàn)void S_func(bool Out32, const bool In48) for(char i=0,j,k; i8; +i,In+=6,Out+=4) j = (In01) + In5; k = (In13) + (In22) + (In31) + In4;ByteToBit(Out, &S_Boxijk, 4); / F函數(shù)的實(shí)現(xiàn)void F_func(bool In32, const bool Ki48) static bool MR48; Transform(MR, In, Extension_Table, 48); Xor(MR, Ki, 48); S_fun

35、c(In, MR); Transform(In, In, P_Table, 32);/ 設(shè)置子密鑰void SetSubKey(PSubKey pSubKey, const char Key8) static bool K64, *KL=&K0, *KR=&K28; ByteToBit(K, Key, 64); /轉(zhuǎn)換格式 Transform(K, K, PCK_Table, 56); / 由56位密鑰產(chǎn)生48位子密鑰 for(int i=0; i16?16:len);SetSubKey(&SubKey0, &deskey0);Is3DES = len8 ? (SetSubKey(&SubKe

36、y1, &deskey8), true) : false;/ DES加解密函數(shù)void DES(char Out8, char In8, const PSubKey pSubKey, bool Type) static bool M64, tmp32, *Li=&M0, *Ri=&M32; ByteToBit(M, In, 64); Transform(M, M, IP_Table, 64); if( Type = ENCRYPT ) for(int i=0; i=0; -i) memcpy(tmp, Li, 32); F_func(Li, (*pSubKey)i); Xor(Li, Ri,

37、32); memcpy(Ri, tmp, 32); Transform(M, M, IPR_Table, 64); BitToByte(Out, M, 64);/ DES加解密函數(shù)(可以對(duì)長明文分段加密)bool DES_Act(char *Out, char *In, long datalen, const char *Key, int keylen, bool Type) if( !( Out & In & Key & (datalen=(datalen+7)&0 xfffffff8) ) ) return false;SetKey(Key, keylen);if( !Is3DES ) /

38、 1次DESfor(long i=0,j=datalen3; i3; ij; +i,Out+=8,In+=8) DES(Out, In, &SubKey0, Type);DES(Out, Out, &SubKey1, !Type);DES(Out, Out, &SubKey0, Type);return true;void main()/ 密鑰設(shè)置char key=0,2,1,0,9,4,5,1,7,8,5,0,7,2,8; / 設(shè)置明文char plain_text= Welcome to DES world! It is wonderful! ;char encrypt_text255;

39、/ 密文char decrypt_text255; / 解密文memset(encrypt_text,0,sizeof(encrypt_text);memset(decrypt_text,0,sizeof(decrypt_text);printf(nDES加密前的明文:n);printf(%snn,plain_text); / 進(jìn)行DES加密DES_Act(encrypt_text, plain_text, sizeof(plain_text), key, sizeof(key), ENCRYPT);printf(nDES加密后的密文:n);printf(%snn,encrypt_text);

40、DES_Act(decrypt_text, encrypt_text, sizeof(plain_text), key, sizeof(key), DECRYPT);printf(n解密后的輸出:n);printf(%s,decrypt_text);getchar();3 DES的應(yīng)用誤區(qū)及加密軟件的實(shí)現(xiàn)3.1 DES的應(yīng)用誤區(qū)DES算法具有極高的安全性,到目前為止,除了用窮舉搜索法對(duì)DES進(jìn)行攻擊外,還沒有發(fā)現(xiàn)別的更有效的方法,而56位長的密鑰的窮舉空間為256,這意味著如果一臺(tái)計(jì)算機(jī)的速度是一秒鐘檢測(cè)一百萬個(gè)密鑰,則它搜索完全部密鑰需要2285年的時(shí)間,這是難以實(shí)現(xiàn)的,當(dāng)然,隨著科學(xué)技術(shù)的

41、發(fā)展,當(dāng)出現(xiàn)超高速的計(jì)算機(jī)后,可以考慮把DES密鑰的長度再增長一些,以此來達(dá)到更高的保密程度。3.2 加密軟件的實(shí)現(xiàn)首先,完善自己的算法,保證其安全性和執(zhí)行速度。用壓縮文件壓縮被加密過的文件,壓縮比率趨于零,說明算法比較好。此外,還可以用二進(jìn)制分析工具分別打開原文件和密碼文件,比較它們的對(duì)應(yīng)關(guān)系來看密文是不是絕對(duì)隨機(jī)的。其次,可以在程序中加入驗(yàn)證密碼的功能,使得軟件使用更方便,更適合現(xiàn)代軟件的要求,但同時(shí)也給了破譯者創(chuàng)造了機(jī)會(huì)。參考資料:王群 計(jì)算機(jī)網(wǎng)絡(luò)安全技術(shù) 清華大學(xué)出版社 2008年8月謝曉燕 網(wǎng)絡(luò)安全與管理實(shí)驗(yàn)教程 西安電子科技大學(xué)出版社 2008年8月牛冠杰等 網(wǎng)絡(luò)安全技術(shù)實(shí)現(xiàn)與代碼解析 人民郵電出版社 2007年8月張潔,朱麗娟 DES加密算法分析與實(shí)現(xiàn) 中國礦業(yè)大學(xué) 2007年2月20

展開閱讀全文
溫馨提示:
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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!