




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
./基于DES算法的數據加密解密的軟件實現摘要隨著信息社會的到來,人們在享受信息資源所帶來的巨大的利益的同時,也面臨著信息安全的嚴峻考驗。信息安全已經成為世界性的現實問題,信息安全問題已威脅到國家的政治、經濟、軍事、文化、意識形態等領域,同時,信息安全問題也是人們能否護自己的個人隱私的關鍵。信息安全是社會穩定安全的必要前提條件。本文是一篇討論關于常用文件加密解密算法的技術調研論文,它詳細的講述了文件加密解密算法實現的過程中所用到的方法、技術。對公鑰密碼體制和私鑰密碼體制進行了分析和研究,并對公鑰密碼體制和私鑰密碼體制的代表DES算法進行了研究。關鍵字:文件解密,文件加密,密碼體制,DES。第一章DES算法的技術背景介紹1.1背景與意義DES是由美國IBM公司于20世紀70年代中期的密碼算法發展而來的,在1977年1月15日,美國國家標準局正式公布實施,并得到了ISO的認可。在過去近20年的時間里,DES被廣泛應用于美國聯邦和各種商業信息的安全工作中,經受信了各種密碼分析和攻擊,體現出了令人滿意的字全性。但隨著密碼分析技術和計算能力的提高,1994年,美國決定不再使用DES算法,目前DES算法已被更為安全的加解密算法取代。雖然這樣,但是目前還無法將DES加密算法徹底破解掉,而且DES算法的加解密算法非常快,仍是目前使用最為普遍的對稱密碼算法。在國,隨著三金工程尤其是金卡工程的啟動,DES算法在POS、ATM、磁卡及智能卡、加汕站、高速公路收費站等領域被廣泛應用,以此來實現關鍵數據的,如信用卡人的PIN碼加密偉輸,IC卡與POS機之間的雙向認證、金融交易數據包的MAC校驗等,均用到DES算法。1.2系統設計1.2.1系統主要目標基本要求部分:1.能夠對一個明文分組進行加密,加密后能夠正確解密。2.程序運行時可以輸出任一組密鑰。因為實現了對任意長度明加密,所以沒輸出每一輪加密后的結果。因為當明文長度過長時,每一輪加密結果會很多。3.程序有良好的人機交互操作。較高要求部分:1.如果明文不止一個分組,程序能完成分組,然后加密;最后一個分組長度不足時要求完成填充。2.密鑰采用ASCII碼,明文輸入信息可以是文字〔可以是漢字或英文,要求不止一個加密分組長度,任意字符。進行加密后,能夠進行正確的解密。3.程序代碼有比較好的結構,模塊劃分合理,用類進行封裝,通過調用類的成員函數實現加密解密功能。運行環境本軟件用C#語言編寫,編寫時所用的工具主要是VisualStudio。編輯成功后的.EXE文件可以在裝有windows系統的任何計算機上使用。測試平臺:WindowsXPProfessional使用軟件:MicrosoftVisualStudio2005。功能模塊密鑰模塊、加密模塊、解密模塊。第二章相關技術的介紹和發展2.1DES算法介紹DES算法為密碼體制中的對稱密碼體制,又被成為美國數據加密標準,是1972年美國IBM公司研制的對稱密碼體制加密算法。其密鑰長度為56位,明文按64位進行分組,將分組后的明文組和56位的密鑰按位替代或交換的方法形成密文組的加密方法。DES加密算法特點:分組比較短、密鑰太短、密碼生命周期短、運算速度較慢。DES工作的基本原理是,其入口參數有三個:key、data、mode。key為加密解密使用的密鑰,data為加密解密的數據,mode為其工作模式。當模式為加密模式時,明文按照64位進行分組,形成明文組,key用于對數據加密,當模式為解密模式時,key用于對數據解密。實際運用中,密鑰只用到了64位中的56位,這樣才具有高的安全性。DES<DataEncryptionStandard>算法,于1977年得到美國政府的正式許可,是一種用56位密鑰來加密64位數據的方法。雖然56位密鑰的DES算法已經風光不在,而且常有用Des加密的明文被破譯的報道,但是了解一下昔日美國的標準加密算法總是有益的,而且目前DES算法得到了廣泛的應用,在某些場合,仍然發揮著余熱。2.2問題解決思路基本要求部分能夠對一個明文分組進行加密,加密后能夠正確解密。程序運行時可以輸出任一組密鑰。因為實現了對任意長度明加密,所以沒輸出每一輪加密后的結果。因為當明文長度過長時,每一輪加密結果會很多。程序有良好的人機交互操作。較高要求部分如果明文不止一個分組,程序能完成分組,然后加密;最后一個分組長度不足時要求完成填充。密鑰采用ASCII碼,明文輸入信息可以是文字〔可以是漢字或英文,要求不止一個加密分組長度,任意字符。進行加密后,能夠進行正確的解密。程序代碼有比較好的結構,模塊劃分合理,用類進行封裝,通過調用類的成員函數實現加密解密功能。2.3DES算法的發展歷程本世紀五十年代以來,密碼學研究領域出現了最具代表性的兩大成就。其中之一就是1971年美國學者塔奇曼〔Tuchman和麥耶〔Meyer根據信息論創始人香農〔Shannon提出的"多重加密有效性理論"創立的,后于1977年由美國國家標準局頒布的數據加密標準。DES密碼實際上是Lucifer密碼的進一步發展。它是一種采用傳統加密方法的區組密碼。它的算法是對稱的,既可用于加密又可用于解密。美國國家標準局1973年開始研究除國防部外的其它部門的計算機系統的數據加密標準,于1973年5月15日和1974年8月27日先后兩次向公眾發出了征求加密算法的公告。加密算法要達到的目的通常稱為DES密碼算法要求主要為以下四點:提供高質量的數據保護,防止數據未經授權的泄露和未被察覺的修改;具有相當高的復雜性,使得破譯的開銷超過可能獲得的利益,同時又要便于理解和掌握DES密碼體制的安全性應該不依賴于算法的,其安全性僅以加密密鑰的為基礎實現經濟,運行有效,并且適用于多種完全不同的應用。1977年1月,美國政府頒布:采納IBM公司設計的方案作為非數據的正式數據加密標準〔DES棗DataEncryptionStandard。目前在這里,隨著三金工程尤其是金卡工程的啟動,DES算法在POS、ATM、磁卡及智能卡〔IC卡、加油站、高速公路收費站等領域被廣泛應用,以此來實現關鍵數據的,如信用卡持卡人的PIN的加密傳輸,IC卡與POS間的雙向認證、金融交易數據包的MAC校驗等,均用到DES算法。DES算法的入口參數有三個:Key、Data、Mode。其中Key為8個字節共64位,是DES算法的工作密鑰;Data也為8個字節64位,是要被加密或被解密的數據;Mode為DES的工作方式,有兩種:加密或解密。DES算法是這樣工作的:如Mode為加密,則用Key去把數據Data進行加密,生成Data的密碼形式〔64位作為DES的輸出結果;如Mode為解密,則用Key去把密碼形式的數據Data解密,還原為Data的明碼形式〔64位作為DES的輸出結果。在通信網絡的兩端,雙方約定一致的Key,在通信的源點用Key對核心數據進行DES加密,然后以密碼形式在公共通信網〔如網中傳輸到通信網絡的終點,數據到達目的地后,用同樣的Key對密碼數據進行解密,便再現了明碼形式的核心數據。這樣,便保證了核心數據〔如PIN、MAC等在公共通信網中傳輸的安全性和可靠性。通過定期在通信網絡的源端和目的端同時改用新的Key,便能更進一步提高數據的性,這正是現在金融交易網絡的流行做法。第三章DES算法的應用3.1DES算法詳述DES算法把64位的明文輸入塊變為64位的密文輸出塊,它所使用的密鑰也是64位,其功能是把輸入的64位數據塊按位重新組合,并把輸出分為L0、R0兩部分,每部分各長32位,其置換規則見下表: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位,……,依此類推,最后一位是原來的第7位。L0、R0則是換位輸出后的兩部分,L0是輸出的左32位,R0是右32位,例:設置換前的輸入值為D1D2D3……D64,則經過初始置換后的結果為:L0=D550……D8;R0=D57D49...D7。經過26次迭代運算后,得到L16、R16,將此作為輸入,進行逆置換,即得到密文輸出。逆置換正好是初始置的逆運算,例如,第1位經過初始置換后,處于第40位,而通過逆置換,又將第40位換回到第1位,其逆置換規則如下表所示: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,51,19,59,27,34,2,42,10,50,18,5826,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,18,31,10,2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25,3.2功能模塊的應用密鑰模塊privatevoidKey<stringstr>//此函數用來獲取密鑰的數組str是密鑰字符串,最后得到鑰密二進制數組.用一個類成員數組key來存放。privatevoidKeyBuild<>//此函數用來構造16輪子密鑰privatevoidKeycreate<int[]midkey2,intmovebit,intn>//此函數用來實現循環左移,同時進行PC2置換上面二個函數用來產生16輪密鑰,最后存放在類成員二維數組keyArray中。privatevoidShowKey<>//此函數用來顯示密鑰3.2.2加密模塊privatevoidbutton2_Click<objectsender,EventArgse>//加密事件加密事件包含了ArrayDes<>函數;privatevoidArrayDes<>//此函數用來對明文分組加密ArrayDes<>包含PlainArray<>、Key<>、KeyBuild<>、Keycreate〔、ShowKey<>和Des〔函數,privatevoidPlainArray<stringstr>//此函數用來獲取明文字符串的二進制數組。privatevoidDes<int[,]plain,int[]key,intn>//DES加密函數3.2.3解密模塊privatevoidbutton4_Click<objectsender,EventArgse>//解密事件privatevoidExchange<>//此函數用來交換16輪密鑰,把第一輪作最后一輪privatevoidArrayDecode<>//此函數用來分組解密privatevoidEncodeArray<stringst>//此函數用來對16進制的密文轉成二進制privatevoidDecode<refint[,]plain,int[]key,intn>//解密函數第四章DES周邊技術發展4.1基本要求部分初始置換IP將IP盒分為左32位和 右32位,將明文左32位和右32位分別進行IP置換,最后既實現了IP置換,同時還將明文分成了左32位和右32位,為下一步做好了準備。for<i=0;i<32;i++>{lData[i]=Encode[IP1[i]-1];rData[i]=Encode[IP1[i+32]-1];}循環變量i用來找到IP盒中下標為i的數,IP[i]取出該數,由于計算機中下標是從零開始計算的,而IP[i]表的是明文二進制中第幾個數,所以應置換成明文二進制中第IP[i]-1那個數。4.1.2E盒擴展privatevoidEChange<refint[]rData,refint[]rDataP>{for<inti=0;i<48;i++>{rDataP[i]=rData[E[i]-1];}}rData表示要傳入的右32位二進制明文,rDataP表示經過E盒變化后的要傳回的48位。道理和IP置換差不多。也是找到E盒中相應的數,然后減1找到rData中相應的數,然后存到rDataP中。4.1.3與密鑰進行異或for<i=0;i<48;i++>{rDataP[i]=rDataP[i]^keyArray[k,i];}keyArray數組中存放的是16倫密鑰,k表示第幾倫,是從0開始計數的。rDataP是從E盒中出來的48位二進,變化完后,依然存在rDataP數組中.4.1.4S盒變換for<i=0;i<48;i+=6>{n=i/6;linex=<rDataP[i]<<1>+rDataP[i+5];liney=<rDataP[i+1]<<3>+<rDataP[i+2]<<2>+<rDataP[i+3]<<1>+rDataP[i+4];FillBin<refrData,n,S[n,linex,liney]>;}Linex變量指S盒的第幾行,liney變量指S盒的第幾列."rDataP[i]<<1”n=i/6;表示第幾個S盒。實例把101101代入:linex=<<rDataP[0]=1><<1>+<rDataP[0+5]=1>="10”+"1”=2+1=3;同理可以算出liney=6;FillBin<>參數rData用來輸出S盒變換后的32二進制,n第幾個S盒,S[n,linex,liney]對應S盒中的相應數.下面是FillBin的具體代碼:privatevoidFillBin<refint[]rData,intn,ints>{int[]temp=newint[4];inti;for<i=0;i<4;i++>//將S盒中的數轉成四位二制數{temp[i]=s%2;s=s/2;}for<i=0;i<4;i++>//將每次的四位二進制數存32位rData數組中{rData[n*4+i]=temp[3-i];}}4.1.5P置換運算for<i=0;i<32;i++>{temp[i]=rData[i];}先將經過S盒代替的32位存入temp[]數組中,主要原因是這里輸入的32位和輸出的32位都是存在rData[]數組中,如果用不同的數組來存放可以不用進行這一步。for<i=0;i<32;i++>{rData[i]=temp[P[i]-1];}4.1.6與左32位進行異或for<i=0;i<32;i++>{rData[i]=lData[i]^rData[i];}左322位與右32位異或后依然存放在rData[]數組中,作為下一輪的右32位輸入.4.1.7逆IP置換privatevoidIP2Change<refint[]lData,refint[]rData,refint[]Encode>{int[]temp=newint[64];inti;for<i=0;i<32;i++>{temp[i]=rData[i];temp[i+32]=lData[i];}for<i=0;i<64;i++>{Encode[i]=temp[IP2[i]-1];}}本來最后一輪不應該交換左32位與右32位,但之前我們同樣將它們交換了,然后在IP逆置換中將它們再交換回來。這里的temp[]數組就是用實現它們的交換。然后再進行IP逆置換。4.1.8DES加密函數privatevoidDes<int[,]plain,int[]key,intn>{int[]lData=newint[32],rData=newint[32],temp=newint[32],rDataP=newint[48];int[]Encode=newint[64];inti;BuildEncode<reflData,refrData,refEncode,n>;PlainData<reflData,refrData,refEncode>;for<intk=0;k<16;k++>{for<i=0;i<32;i++>{temp[i]=rData[i];}EChange<refrData,refrDataP>;for<i=0;i<48;i++>{rDataP[i]=rDataP[i]^keyArray[k,i];}SChange<refrDataP,refrData>;PChange<refrData>;for<i=0;i<32;i++>{rData[i]=lData[i]^rData[i];}for<i=0;i<32;i++>{lData[i]=temp[i];}}IP2Change<reflData,refrData,refEncode>;for<i=0;i<64;i++>{strkey[i]=Encode[i];}}BuildEncode<reflData,refrData,refEncode,n>函數所有明文二進制數組中選出64位,并將它們分成左32位和右32位,rData[]存放右32位,lData存放左32位,Encode[]存放64位.n表示對文明進行分組加密中的第幾組.PlainData<reflData,refrData,refEncode>進行IP置換for<i=0;i<32;i++>{temp[i]=rData[i];}每一輪進行變化之前先將右32位存入temp[]數組中,作為下一輪的左32位輸入。這個循環與下面一起實現該功能for<i=0;i<32;i++>{lData[i]=temp[i];}4.1.9密鑰交換privatevoidExchange<>{int[,]key1=newint[16,48];inti,j;for<i=0;i<16;i++>{for<j=0;j<48;j++>{key1[i,j]=keyArray[i,j];}}for<i=0;i<16;i++>{for<j=0;j<48;j++>{keyArray[15-i,j]=key1[i,j];}}}解密時先要將16輪密鑰進行交換。Decode<>解密函數privatevoidDecode<refint[,]plain,int[]key,intn>{int[]lData=newint[32],rData=newint[32],temp=newint[32],rDataP=newint[48];int[]Encode=newint[64];inti;BuildEncode<reflData,refrData,refEncode,n>;PlainData<reflData,refrData,refEncode>;for<intk=0;k<16;k++>{for<i=0;i<32;i++>{temp[i]=rData[i];}EChange<refrData,refrDataP>;for<i=0;i<48;i++>{rDataP[i]=rDataP[i]^keyArray[k,i];}SChange<refrDataP,refrData>;PChange<refrData>;for<i=0;i<32;i++>{rData[i]=lData[i]^rData[i];}for<i=0;i<32;i++>{lData[i]=temp[i];}}IP2Change<reflData,refrData,refEncode>;for<i=0;i<64;i++>{strkey[i]=Encode[i];}}解密函數一開始也是進行IP置換,而不是進行IP逆置換,因為上一輪結束時的IP逆置換和解密開始的IP置換相乘夠成單位矩陣。4.2較高要求部分1.實現了對任意長度的明文都能加密。最后一個明文長度不足時在后面添加二進制零,補足64明文二進制。密鑰部分通過設定密鑰輸入框的屬性來限定密鑰長度最長為8個字符,當不足8個字符時,彈出友好的提示框,提醒用戶輸入8個字符。2.密鑰用ASCII碼,即一個字符用8位二進制數表示。明文可以是任意字符〔漢字和英文,明文一個字符用16位二進制數表示。3.程序代碼有比較好的結構,模塊劃分合理,所有功能都用類成員函數實現,整個軟件用一個類實現。4.界面友好,各種輸入輸出方便。4.2.1分組加密實現對明文用電碼本模式進行分組加密,每一個字符16位二進制,4個字符一個明文分組。相同的明文分組,將得到相同的十六進制字符。4.2.2明文分組最后分組的填充在明文字符串轉二進制時,就在一個大數組后面加零,最后計算加密輪數時分二種情況,一種情況是剛好最后一個分組明文就完了,另外一種情況是最后一個分組不足時,加密輪數為:明文字符串長度/4+1。實現代碼如下:if<richTextBox1.TextLength%4!=0>{for<intn=0;n<4*<richTextBox1.TextLength/4+1>;n=n+4>{Des<a,key,n>;ShowCiphertext<>;}}else{for<intn=0;n<richTextBox1.TextLength;n=n+4>{Des<a,key,n>;ShowCiphertext<>;}}第五章DES算法的發展趨勢AES——對稱密碼新標準對稱密碼體制的發展趨勢將以分組密碼為重點。分組密碼算法通常由密鑰擴展算法和加密〔解密算法兩部分組成。密鑰擴展算法將b字節用戶主密鑰擴展成r個子密鑰。加密算法由一個密碼學上的弱函數f與r個子密鑰迭代r次組成。混亂和密鑰擴散是分組密碼算法設計的基本原則。抵御已知明文的差分和線性攻擊,可變長密鑰和分組是該體制的設計要點。AES是美國國家標準技術研究所NIST旨在取代DES的21世紀的加密標
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單原子催化原子尺度
- 2025年寧夏貨運從業資格證試題答題器app
- 連續光500mw換算脈沖光功率
- 瀝青混合料組成結構
- 保護視力裝置課件
- 幫助別人的作文三年級300字左右
- 人教版小學二年級數學第二單元估算
- 全國殘疾預防日活動總結
- 公司年會領導致辭范文15篇
- 便利店員工培訓教材
- 視力防控健康教育
- 太乙課堂游戲最終版
- 大數據分析和可視化平臺使用手冊
- 2025年杭州醫學院考研試題及答案
- 2025年骨科入科考試題及答案
- 2025年山西工程職業學院單招職業傾向性測試題庫含答案
- 基于三新背景下的2025年高考生物二輪備考策略講座
- 醫療機構自殺風險評估與預防措施
- 全國自考《銀行會計學》2024年7月《銀行會計學》自學考試試題及答案
- 術前預防感染
- 生產設備設施-射線探傷-安全檢查表
評論
0/150
提交評論