版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
PAGE第1頁共29頁學(xué)位論文基于Misty1算法的加密軟件(Java)的實現(xiàn)論文作者姓名:申請學(xué)位專業(yè):計算機(jī)科學(xué)與技術(shù)申請學(xué)位類別:論文提交日期:基于Misty1算法的加密軟件(Java)的實現(xiàn)摘要隨著計算機(jī)網(wǎng)絡(luò)及通信技術(shù)的飛速發(fā)展,信息安全成了信息社會急需解決的最重要的問題之一,密碼技術(shù)是保證信息安全的核心技術(shù)。本文用JAVA語言開發(fā)了一個基于Misty1算法的加密軟件,該軟件能對文件進(jìn)行加密和解密。在具體實現(xiàn)時,首先分析了Misty1算法的基本結(jié)構(gòu),設(shè)計出相應(yīng)的實施方法,正確實現(xiàn)了該算法,其次,設(shè)計了一個圖形用戶界面,最后對軟件進(jìn)行了測試,驗證了實現(xiàn)方法的正確性。關(guān)鍵詞:Misty1;Java;加密;解密
TheImplementationofEncryptionSoftware(Java)BasedonMisty1AlgorithmAbstractWiththerapiddevelopmentofcomputernetworkstechnologyandcommunicationtechnology,Informationsecurityhasbecomeoneofthemostimportantproblemsurgenttoresolveininformationsociety,Cryptographictechnologyisthecoretechnologytoguaranteeinformationsecurity.Inthispaper,thesoftwareofencryptionbasedonMisty1algorithmisdevelopedbyusingJAVAlanguage.Itcanencryptanddecryptafile.Duringtheprocessofimplementation,thebasicstructureofthealgorithmisanalyzedfirstandthecounterpartmethodisdesigned,secondly,aGUIisdesigned,finally,thesoftwareistested,theresultshowsthatmethodofimplementationisright.Keywords:Misty1;Java;Encryption;Decrypt目錄論文總頁數(shù):24頁1 引言 11.1 課題背景 11.2 國內(nèi)外研究現(xiàn)狀 11.3 本課題研究的意義 21.4 本課題的研究方法 32 Misty1算法描述 32.1 秘鑰產(chǎn)生部分 32.2 數(shù)據(jù)隨機(jī)化部分 42.3 函數(shù)描述 42.3.1 FI函數(shù) 42.3.2 FO函數(shù) 52.3.3 FL函數(shù) 72.3.4 FL-1函數(shù) 83 Misty1加密軟件的設(shè)計與實現(xiàn) 93.1 工作環(huán)境介紹 93.2 Java及程序編輯工具介紹 93.2.1 Java介紹 93.2.2 程序編輯工具介紹 103.3 Misty1算法應(yīng)用于文件加密的分析 123.4 Misty1算法的實現(xiàn) 133.4.1 加密 133.4.2 解密 153.5 設(shè)計流程圖、圖形界面及事件處理 183.5.1 加密/解密流程圖 183.5.2 圖形界面 183.5.3 處理按鈕事件 204 程序演示 214.1 程序演示 214.2 結(jié)果及存在的問題 21結(jié)論 22參考文獻(xiàn) 22致謝 23聲明 24第24頁共24頁引言課題背景現(xiàn)代密碼學(xué)是一門迅速發(fā)展的應(yīng)用科學(xué)。隨著因特網(wǎng)的迅速普及,人們依靠它傳送大量的信息,但是這些信息在網(wǎng)絡(luò)上的傳輸都是公開的。因此,對于關(guān)系到個人利益的信息必須經(jīng)過加密之后才可以在網(wǎng)上傳送,這將離不開現(xiàn)代密碼技術(shù)。Misty1算法是在1996年公布的,它是一個分組密碼算法,密鑰長度是128位,明文長度是64位。它是由在三菱工作的EisakuTakeda提交給NESSIE。MISTY1可以在資源緊張的環(huán)境下實現(xiàn)。整個算法是由遞歸等組成,每一個層次的結(jié)構(gòu)又一穩(wěn)妥的Feistel結(jié)構(gòu)。MISTY1是一迭代密碼可以迭代超過8輪,或者更普遍,迭代4回。它用128位密鑰對64位數(shù)據(jù)進(jìn)行不確定輪回的加密。它采用了兩個S-盒,一個7×7S-盒,s7,一個9×9S-盒,s9。它取得了良好的良好的阻力線和鑒別攻擊,而且還使能實行以相對較少的邏輯組件中執(zhí)行函數(shù)的程度相對較低。國內(nèi)外研究現(xiàn)狀隨著我國對計算機(jī)的普及,計算機(jī)和通信技術(shù)已經(jīng)在我國得到了廣泛發(fā)展及應(yīng)用,從而使我們對信息的安全存儲、安全處理和安全傳輸?shù)男枰絹碓狡惹?。特別在Internet的應(yīng)用中,以及個人通信、個人電子身份證、辦公自動化,電子郵件、電子自動轉(zhuǎn)帳支付系統(tǒng)和自動零售業(yè)務(wù)網(wǎng)的建立與實現(xiàn),信息的安全保護(hù)問題已經(jīng)顯得十分突出,而能夠解決這一問題的一個有效手段就是使用現(xiàn)代密碼技術(shù)。美國早在1977年就制定了本國的數(shù)據(jù)加密標(biāo)準(zhǔn),即DES。隨著DES的出現(xiàn),人們對分組密碼展開了深入的研究和討論,已有大量的分組密碼,如DES的各種變形、IDEA算法、SAFER系列算法、RC系列算法、Skipjack算法、FEAL系列算法、REDOC系列算法、CAST系列算法Khufu,KhafreMMB,3-WAY,TEA,Blowfish,GOST,SQUARE,MISTY,Rijndael算法和AES15種候選算法(第一輪),另有NESSIE17種候選算法(第一輪)等。目前分組密碼所采用的整體結(jié)構(gòu)可分為Feistel結(jié)構(gòu)(例如CAST—256、DEAL、DFC、E2等)、SP網(wǎng)絡(luò)(例如Safer+、Serpent等)及其他密碼結(jié)構(gòu)(例如Frog和HPC)。加解密相似是Feistel型密碼的一個實現(xiàn)優(yōu)點(diǎn),但它在密碼的擴(kuò)散似乎有些慢,例如需要兩輪才能改變輸入的每一個比特。SP的網(wǎng)絡(luò)結(jié)構(gòu)非常清晰,S一般被稱為混淆層,主要起混淆作用。P一般被稱為擴(kuò)散層,主要起擴(kuò)散作用。在明確S和P的某些密碼指標(biāo)后,設(shè)計者能估計SP型密碼抵抗差分密碼分析和線性密碼分析的能力。SP網(wǎng)絡(luò)和Feistel網(wǎng)絡(luò)相比,可以得到更快速的擴(kuò)散,但是SP密碼的加/解密通常不相似。目前對分組密碼安全的討論主要包括差分密碼分析、線性密碼分析和強(qiáng)力攻擊等。從理論上講,差分密碼分析和線性密碼分析是目前攻擊分組密碼的最有效的方法,而從實際上說,強(qiáng)力攻擊是攻擊分組密碼最可靠的方法。到目前為止,已有大量文獻(xiàn)討論各種分組密碼的安全性,同時推出了譬如截斷差分分析、非線性密碼分析及插值攻擊等多種分析方法。自AES候選算法公布以后,國內(nèi)外許多專家學(xué)者都致力于候選算法的安全分析,預(yù)計將會推出一些新的攻擊方法,這無疑將進(jìn)一步推動分組密碼的發(fā)展。本課題研究的意義標(biāo)準(zhǔn)化是工業(yè)社會的一個基本概念,它意味著生產(chǎn)規(guī)?;?、降低成本、方便維修和更換為了實現(xiàn)非相關(guān)團(tuán)體之間的保密通信,加密體制的標(biāo)準(zhǔn)化是必要的。分組密碼由于其固有特點(diǎn),已經(jīng)成為標(biāo)準(zhǔn)化進(jìn)程的首選體制。信息安全的最大特點(diǎn)之一是自主性,因而其核心技術(shù)——密碼學(xué)的研究與開發(fā)應(yīng)當(dāng)是一種本土性的科學(xué)。對于有些產(chǎn)品,可以通過外方引進(jìn)來解決由于技術(shù)落后而帶來的問題。然而對于安全產(chǎn)品,除非能完全確信它在硬件和軟件上沒有陷門,否則,貿(mào)然使用可能帶來不可預(yù)測的后果。而要做到軟硬件上的確認(rèn)通常是十分困難的。因此,最明智的方法是依靠自己的力量并汲取現(xiàn)有的先進(jìn)經(jīng)驗進(jìn)行研究、設(shè)計和開發(fā)。為了維護(hù)通信安全、打擊犯罪,1993年4月,美國政府宣布了一項新的建議,該建議倡導(dǎo)聯(lián)邦政府和工業(yè)界使用新的具有密鑰托管功能的聯(lián)邦加密標(biāo)準(zhǔn)。該建議稱為托管加密標(biāo)準(zhǔn)(escrowedencrytionstandard,EES),又稱C1ipper建議。其目的是為用戶提供更好的安全通信方式,同時允許政府機(jī)構(gòu)在必要情況下進(jìn)行監(jiān)聽。EES系統(tǒng)中嵌入了分組加密算法Sk-ipjack,盡管目前對該系統(tǒng)和算法有許多爭議,但從維護(hù)國家通信安全的角度,這項建議是有積極意義的。在區(qū)域通信系統(tǒng)中,用戶較多,他們的地位、作用都不相同,所流通的信息的重要性也不可能完全相同,因此他們要求得到的安全保護(hù)等級也不應(yīng)該相同。由此可見,研究多安全級密碼算法非常必要。迭代分組密碼(所謂選代分組密碼就是以迭代一個簡單的輪函數(shù)為基礎(chǔ)的密碼,即通過選擇某個較簡單的密碼變換,在密鑰控制下以迭代方式多次利用它進(jìn)行加密變換,例如Feistel型密碼就是一種選代密碼,是分組密碼的典型代表,其數(shù)學(xué)思想簡單而靈巧。特別是在相同的輪函數(shù)之下,迭代次數(shù)的不同即代表了安全強(qiáng)度的不同級別。在Internet/Intranet中隨著通信量和業(yè)務(wù)種類的增加,對安全認(rèn)證和保密業(yè)務(wù)的需求日益迫切。比如,PGP(PrettyGoodPrivacy)就是一種廣泛應(yīng)用于Internet中E-mail系統(tǒng)的一種安全技術(shù)方案,它也可以用于其他網(wǎng)絡(luò)中。PGP的安全業(yè)務(wù)包括機(jī)密性、認(rèn)證性、不可抵賴性等,其中的機(jī)密性就是利用分組密碼算法IDEA來保證的。另外,分組密碼的工作模式可提供一些人們所需要的其他密碼技術(shù),比如流密碼技術(shù)和雜湊技術(shù)等。本課題的研究方法研究相關(guān)資料,理解Misty1算法的原理,并參考學(xué)習(xí)使用其他編程語言編寫的基于此算法的加密軟件的代碼。深入學(xué)習(xí)Java編程語言,熟悉其編寫程序的流程。然后嘗試用Java來實現(xiàn)Misty1算法,能對數(shù)據(jù)進(jìn)行加密和解密。對程序進(jìn)行測試,對測試結(jié)果進(jìn)行分析研究,進(jìn)而對程序進(jìn)行改進(jìn),對關(guān)鍵算法代碼進(jìn)行盡可能的優(yōu)化,最終得到一個在windows運(yùn)行的可以用指定密鑰對文件進(jìn)行MISTY1加密并可解密的完整應(yīng)用程序。Misty1算法描述MISTY1算法是用128位密鑰對64位數(shù)據(jù)進(jìn)行不確定輪回的加密。它在設(shè)計時就采用了經(jīng)證實可以抵抗密碼微分分析和線形分析的安全理論,而且它實現(xiàn)了在硬件環(huán)境和軟件環(huán)境下都比較高的加密速度。算法可以分為兩部分,一部分是密鑰的產(chǎn)生部分,另一部分是數(shù)據(jù)隨機(jī)化部分。密鑰產(chǎn)生部分根據(jù)128位的輸入密鑰,產(chǎn)生128位的擴(kuò)展密鑰。數(shù)據(jù)隨機(jī)化部分輸入64位的數(shù)據(jù)進(jìn)行混合,也就是所謂的加密。秘鑰產(chǎn)生部分K為輸入密鑰,K’為擴(kuò)展密鑰,K和K’都是128位,擴(kuò)展密鑰是由函數(shù)FI從K,1,...K,8中產(chǎn)生,并存儲在K,9,...,K,16中。Ki代表K的一個元素,1≤i≤8,每個的長度為16位;然后Ki被認(rèn)為作輸入到FI,Ki+1作為FI模的密鑰。FI模的輸出是16位的K,i,1≤i≤8,K9=K1(圖2-1)圖2-1密鑰產(chǎn)生K=K1‖K2‖K3‖K4‖K5‖K6‖K7‖K8fori=1to8doK,i=FI(Ki,Ki+1)K,=K,1‖K,2‖K,3‖K,4‖K,5‖K,6‖K,7‖K,8數(shù)據(jù)隨機(jī)化部分?jǐn)?shù)據(jù)隨機(jī)化部分使用了兩種函數(shù),F(xiàn)O和FL,函數(shù)FO調(diào)用函數(shù)FI。密鑰擴(kuò)展部分也使用函數(shù)FI。FI函數(shù)使用兩個S盒,S7和S9。函數(shù)描述FI函數(shù)FI函數(shù)將16位輸入分為兩部分L0和R0(圖2-2)圖2-2FI函數(shù)FI的輸入為:X16=L0‖R0KIij=KIijL‖KIijRFI則定義為:R1=S9[L0]∧(00b‖R0)L1=R0R2=S7[L1]∧(truncate(R1))KIijLR3=S9[L2]∧(00b‖R2)L3=R2Y16=L3‖R3FI函數(shù)程序代碼:publicintFI(intx,intKI)//FI函數(shù){ intL1,L2,L3,R1,R2,R3; R1=S9[((x>>7)&0x1FF)]^(x&0x007F); L1=x&0x7F; R2=S7[L1]^(R1&0x7F)^((KI>>9)&0x7F); L2=R1^(KI&0x1FF); R3=S9[L2]^R2; L3=R2; return(L3<<9)|R3;}FO函數(shù)FO函數(shù)將32位的輸入X32分為兩個16位的L0和R0(圖2-3)圖2-3FO函數(shù)FO的輸入為:X32=L0‖R0KOi=KOi1‖KOi2‖KOi3‖KOi4KIi=KIi1‖KIi2‖KIi3FO的功能能表現(xiàn)為:fori=1to3do:Rj=FI(Lj-1∧KOij,KIij)∧Rj-1Lj=Rj-1Y32=(L3∧KOi4)R3FO函數(shù)程序代碼:publiclongFO(longx,inty,intz)//FO函數(shù){inti;intKOS[]=newint[4];intKIS[]=newint[3];System.arraycopy(KO,y,KOS,0,KOS.length);System.arraycopy(KI,z,KIS,0,KIS.length);intL1,L2,L3,R1,R2,R3; R1=FI((KO[0]^((int)(x>>16)&0xFFFF)),KI[0])^((int)(x&0xFFFF));L1=(int)(x&0xFFFF);R2=FI((L1^KO[1]),KI[1])^R1; L2=R1;R3=FI((L2^KO[2]),KI[2])^R2;L3=R2^KO[3];return(((long)L3)<<16)|((long)R3);}FL函數(shù)函數(shù)FL用于加密。它采用32位的輸入數(shù)據(jù)X32,將X32分為兩個16位即XL和XR。另外一個是擴(kuò)展密鑰的下標(biāo)KEY,返回一個32位的數(shù)據(jù)Y32(圖2-4)圖2-4FL函數(shù)FL的輸入為:X32=XL‖XRKLi=KLiL‖KLIrFL的功能為:YR=(XL&KLiL)∧XRYL=(YR|KLIr)∧XL則輸出:Y32=YL‖YRFL函數(shù)程序代碼:publiclongFL(longx,longkey)//FL函數(shù){ longXL,XR,KL,KR,YL,YR; XL=x>>16;XR=x&0x0000FFFF; KL=key>>16;KR=key&0x0000FFFF;YR=(XL&KL)^XR;YL=(YR|KR)^XL;return(YL<<16)|YR;}FL-1函數(shù)FL-1函數(shù)是逆向的FL函數(shù),用于解密。它將32位的輸入Y32分為兩個16位的YL和YR,與KLi進(jìn)行計算,返回一個X32(圖2-5)圖2-5FL-1函數(shù)FL-1輸入為:Y32=YL‖YRKLi=KLiL‖KLIrFL-1的功能:XL=(YR|KLIr)∧YLXR=(XL&KLiL)∧YR則輸出:X32=XL‖XRFL-1函數(shù)程序代碼:publiclongFLINV(longy,longkey)//FLINV函數(shù),F(xiàn)L函數(shù)的逆{ longXL,XR,KL,KR,YL,YR;YL=y>>16;YR=y&0x0000FFFF;KL=key>>16;KR=key&0x0000FFFF;XL=(YR|KR)^YL;XR=(XL&KL)^YR;return(XL<<16)|XR;}Misty1加密軟件的設(shè)計與實現(xiàn)工作環(huán)境介紹本設(shè)計使用的編程語言為Java,使用Java2PlatformStandardEdition5.0。操作系統(tǒng)為WindowsXP,CPU為AMPXP2500+,內(nèi)存256M。Java及程序編輯工具介紹Java介紹Java是1995年5月23日由Sun公司引進(jìn)到我們這個世界的革命性編程語言,它被美國的著名雜志《PCMagazine》評為1995年是大優(yōu)秀科技作品。之所以稱Java為革命性編程語言,是因為傳統(tǒng)的軟件往往與具體的實現(xiàn)環(huán)境有關(guān),一旦環(huán)境有所變化就需要對軟件做一番改動,耗時耗力,而Java編寫的軟件能在執(zhí)行碼上兼容。這樣,只要計算機(jī)提供了Java解釋器,用Java編寫的軟件就能在其上運(yùn)行。Java的優(yōu)點(diǎn)主要有以下幾點(diǎn):(1)Writeonce,runanywhere這句話一直是Java程序員的精神指南,也是Java之所以能夠受到程序設(shè)計師們喜愛的原因之一,最大原因就是JVM技術(shù)。(2)簡單純面向?qū)ο蟮奶匦?,再加上眾多類庫的支持,使用Java開發(fā)各式各樣的應(yīng)用程序,可以說是易如反掌。除此之外,無論在調(diào)試或是程序修改、增加新功能方面,因為對象的特性,使得這些維護(hù)也變得非常容易。(3)安全性Java的很多功能都是針對安全性的問題考慮的,Java甚至可以對于不同的安全需求而Java應(yīng)用程序的安全等級。原則上一個未經(jīng)您允許的Java程序,是不可能傷及你的系統(tǒng)的。(4)UnicodeJava使用Unicode作為他的標(biāo)準(zhǔn)字符,這項特性使得Java的程序在不同語言的平臺上都能編寫和執(zhí)行。Java也是目前所有電腦語言中,唯一天生使用Unicode的語言。(5)網(wǎng)絡(luò)Java可以說是借助互聯(lián)網(wǎng)而重聲的,自然對于具備網(wǎng)絡(luò)功能程序的編寫,也是非常容易的。不論是一般互聯(lián)網(wǎng)的程序Socket、Email,還是服務(wù)器網(wǎng)頁的程序Servlets、JSP,甚至分布式網(wǎng)絡(luò)程序CORBA等的相關(guān)套件支持,可以說是非常豐富,使用起來也是非常容易。(6)資源回收處理資源回收處理是由JVM協(xié)助我們的程序?qū)?nèi)存做動態(tài)的管理,你的程序需要多少內(nèi)存、那些對象的內(nèi)存已經(jīng)不使用了,需要?dú)w還給系統(tǒng),這些煩瑣且危險的工作全部交由JVM去幫我們管理,讓我們能夠更專心的寫程序,不需要擔(dān)心內(nèi)存的問題,而內(nèi)存的統(tǒng)一管理,對于跨平臺也用相當(dāng)?shù)膸椭?。?)異常處理為了使Java程序更安全、更穩(wěn)定,那么程序隨機(jī)應(yīng)變的能力就必須好。Java引入了異常處理機(jī)制,能夠在程序中比較可能有異常情況發(fā)生的地方,加上相對應(yīng)的處理,讓程序不至于因為突發(fā)的錯誤,造成執(zhí)行中斷或是當(dāng)機(jī)的情況。異常處理也讓用戶更恩能夠控制整個程序執(zhí)行的流程,也使得程序的設(shè)計更加嚴(yán)謹(jǐn)。目前Java的主要應(yīng)用在于電子商務(wù)及企業(yè)電子化部分。除此之外,Java也漸漸地在消費(fèi)性電子平臺上發(fā)揮它跨平臺的特性,各手機(jī)廠商、PDA廠商也紛紛地發(fā)表內(nèi)置JVM的系統(tǒng),Java在這方面跟其他程序語言比起來,可以說是如魚得水。未來,除了SUN公司更加強(qiáng)J2EE、J2SE和J2ME中的功能外,Java還會更進(jìn)一步的結(jié)合XML,把現(xiàn)在外掛的XML套件包含進(jìn)Java標(biāo)準(zhǔn)套件中,那么對于跨平臺來說將更是如虎添翼。Java的未來可以說是一片光明。程序編輯工具介紹UltraEdit是很多人愛用的文本編輯軟件,它除了單純的文本編輯外,對于一些特殊的文件,例如Java、ASP等等,都會辨別出它們的關(guān)鍵字或是字符串、數(shù)字等,然后用不同的顏色表示它們,讓你更容易看出程序中有些什么,或是有沒有什么關(guān)鍵字輸入錯了。除此之外它也可以簡單地幫你做錯字的更正。不過它最強(qiáng)的地方在于能設(shè)定一些宏(Macro),讓你可以自行設(shè)計額外的特殊功能。圖3-1程序編輯工具UltraEditUltraEdit有一項執(zhí)行外部指令的功能,還可以把執(zhí)行結(jié)果顯示出來。好處是可以把DOS模式的結(jié)果顯示在一個新的文件里,這樣一來再多的信息也不怕遺漏了。使用方法很簡單,就到菜單欄上選擇“高級”→“DOS命令”,快捷鍵是“F9”。在“命令”處輸入在DOS模式下要輸入的編譯指令,在“工作目錄”圖3-2好用的功能圖3-3DOS命令執(zhí)行后界面Misty1算法應(yīng)用于文件加密的分析Misty1是對稱密鑰加密,也是分組密碼。分組密碼是將明文劃分為固定度的數(shù)據(jù)組,然后以組為單位進(jìn)行加密,分組密碼優(yōu)點(diǎn)是不需同步。實質(zhì)是,設(shè)計一種算法,能在密鑰控制下,把n比特明文簡單而又迅速地置換成唯一n比特密文,并且這種變換是可逆的(解密)。設(shè)計思想:“擴(kuò)散”將明文及密鑰的影響盡可能迅速地散布到較多個輸出的密文中(將明文冗余度分散到密文中)。產(chǎn)生擴(kuò)散的最簡單方法是通過“置換”(比如:重新排列字符)。“混淆”其目的在于使作用于明文的密鑰和密文之間的關(guān)系復(fù)雜化,是明文和密文之間、密文和密鑰之間的統(tǒng)計相關(guān)特性極小化,從而使統(tǒng)計分析攻擊不能奏效。通常的方法是“代換(Substitution)”(比如愷撒密碼)。分組密碼設(shè)計的要求:1、分組長度足夠大(64~128比特);2、密鑰量要足夠大(64~128);3、算法足夠復(fù)雜(包括子密鑰產(chǎn)生算法)4、加密、解密算法簡單,易軟、硬件實現(xiàn)5、便于分析(破譯是困難的,但算法卻簡潔清晰)。所以把Misty1應(yīng)用于文件加密是可行的。在對稱密碼技術(shù)中,其加密密鑰和解密密鑰相同。加密信息的安全性取決于密鑰的安全性,與算法的安全性無關(guān),即由密文和加解密算法不可能得到明文。換句話說算法無需保密,需保密的僅是密鑰。對于帶有重要信息的小型文本和二進(jìn)制數(shù)據(jù)的維護(hù),如果不加密,將無法放心的保存在計算機(jī)上,尤其是聯(lián)網(wǎng)的或機(jī)房里的公共計算機(jī);如果借助功能強(qiáng)大的大型多用戶數(shù)據(jù)保護(hù)程序維護(hù)幾個小型文件,顯得十分煩瑣,好比殺雞用牛刀。所以,對于使用小型文件進(jìn)行數(shù)據(jù)交換的情況,更好的方案是通過一個小型應(yīng)用程序?qū)@些文件進(jìn)行對稱密鑰加密。為了適合前面敘述的在公共BBS與特定的某人交流重要保密信息的情況,加密生成的數(shù)據(jù)應(yīng)該是文本,這樣可以方便復(fù)制粘貼。Misty1算法的實現(xiàn)加密64位的明文輸入P分為兩部份分別為32位L0和R0,在第一輪回和之后的每兩個輪回,左邊和右邊的兩部分Li-1和Ri-1分別與KLi通過FL函數(shù)產(chǎn)生32位的輸出。在每次輪回中的左邊部份調(diào)用接受32位輸入和48位密鑰KIi以及64位的密鑰KOi的FO函數(shù),產(chǎn)生32位的輸出。這種輸出是右邊部分新的一部分。在每一次輪回中,左邊部分和右邊部分相互交換給Li和Ri。經(jīng)過8次輪回最后一次調(diào)用KL函數(shù)得到左部和右部,然后再作最后的重組左邊和右邊即Ln+1和Rn+1產(chǎn)生64位輸出C64,其中n是輪回的次數(shù)(一般為8)。(圖3-1)圖3-1加密其中加密輸入為:P=L0‖R0KL={KLi}KO={KOi}KI={KIi}加密函數(shù)則是:fori=1,3,...,n-1;Ri=FL(Li-1,KLi)Li=FL(Ri-1,KLi+1)^FO(Ri,KOi,KIi)Li+1=Ri^FO(Li,KOi+2,KIi+1)Ri+1=Lifori=n+1;Ri=FL(Li-1.KLi)Li=FL(Ri-1.KLi+1)最后輸出:C=Ln+1‖Rn+1下面是加密部分代碼:publicvoidEncrypt(charptext[],charuserkey[],charctext[]){longL0,L1,L2,L3,L4,L5,L6,L7,L8,L9;longR0,R1,R2,R3,R4,R5,R6,R7,R8,R9;KeySchedule(userkey);//輪回,加密L0=(((long)ptext[0])<<24)+(((long)ptext[1])<<16)+(((long)ptext[2])<<8)+((long)ptext[3]);R0=(((long)ptext[4])<<24)+(((long)ptext[5])<<16)+(((long)ptext[6])<<8)+((long)ptext[7]);R1=FL(L0,KL[0]); L1=FO(R1,0,0)^FL(R0,KL[1]); R2=L1; L2=FO(R2,4,3)^R1; R3=FL(L2,KL[2]); L3=FO(R3,8,6)^FL(R2,KL[3]); R4=L3; L4=FO(R4,12,9)^R3; R5=FL(L4,KL[4]);L5=FO(R5,16,12)^FL(R4,KL[5]);R6=L5;L6=FO(R6,20,15)^R5;R7=FL(L6,KL[6]);L7=FO(R7,24,18)^FL(R6,KL[7]);R8=L7;L8=FO(R8,28,21)^R7;R9=FL(L8,KL[8]);L9=FL(R8,KL[9]);//最后一輪 ctext[0]=(char)((L9>>24)&0XFF);ctext[1]=(char)((L9>>16)&0XFF);ctext[2]=(char)((L9>>8)&0XFF);ctext[3]=(char)(L9&0XFF);ctext[4]=(char)((R9>>24)&0XFF);ctext[5]=(char)((R9>>16)&0XFF);ctext[6]=(char)((R9>>8)&0XFF);ctext[7]=(char)(R9&0XFF);}解密解密函數(shù)運(yùn)行與加密運(yùn)行完全相同,只需要改變兩項:(1)FL-1函數(shù)取代所有的FL函數(shù);(2)命令中的子密鑰的應(yīng)用都扭轉(zhuǎn)。(圖3-2)圖3-2解密解密部分代碼:publicvoidDecrypt(charctext[],charuserkey[],charptext[]){longL0,L1,L2,L3,L4,L5,L6,L7,L8,L9,longR0,R1,R2,R3,R4,R5,R6,R7,R8,R9;KeySchedule(userkey); //反順序輪回,解密 L9=(((long)ctext[0])<<24)+(((long)ctext[1])<<16)+(((long)ctext[2])<<8)+((long)ctext[3]); R9=(((long)ctext[4])<<24)+(((long)ctext[5])<<16)+(((long)ctext[6])<<8)+((long)ctext[7]);R8=FLINV(L9,KL[9]);L8=FO(R8,28,21)^FLINV(R9,KL[8]);R7=L8;L7=FO(R7,24,18)^R8;R6=FLINV(L7,KL[7]);L6=FO(R6,20,15)^FLINV(R7,KL[6]);R5=L6;L5=FO(R5,16,12)^R6;R4=FLINV(L5,KL[5]);L4=FO(R4,12,9)^FLINV(R5,KL[4]);R3=L4;L3=FO(R3,8,6)^R4;R2=FLINV(L3,KL[3]);L2=FO(R2,4,3)^FLINV(R3,KL[2]);R1=L2;L1=FO(R1,0,0)^R2;R0=FLINV(L1,KL[1]);L0=FLINV(R1,KL[0]);//最后一輪 ptext[0]=(char)((L0>>24)&0XFF);ptext[1]=(char)((L0>>16)&0XFF);ptext[2]=(char)((L0>>8)&0XFF);ptext[3]=(char)(L0&0XFF);ptext[4]=(char)((R0>>24)&0XFF);ptext[5]=(char)((R0>>16)&0XFF);ptext[6]=(char)((R0>>8)&0XFF);ptext[7]=(char)(R0&0XFF);}設(shè)計流程圖、圖形界面及事件處理加密/解密流程圖在相應(yīng)文本框中輸入明文/密文在相應(yīng)文本框中輸入明文/密文輸入密鑰點(diǎn)擊“加密”/“加密”按鈕從文本框中讀取明文/密文,轉(zhuǎn)換為char類型傳入相應(yīng)數(shù)組調(diào)用加密/解密函數(shù)將結(jié)果轉(zhuǎn)換為字符串類型輸出到相應(yīng)文本框引發(fā)按鈕事件圖3-3設(shè)計流程圖圖形界面Java中有2個重要且常用的容器(Container),一個是Frame,另一個是Panal。本設(shè)計的圖形界面使用的是Frame。為了使界面一目了然,不至于混淆,往容器添加AWT元件時就需要按一定的方案。Java特別設(shè)計了Laout這個機(jī)制來解決元件版面配置的問題。Java.awt包中總工提供了五個基本的Layout類,本設(shè)計使用的是GridLayout。圖3-4圖形界面圖形界面部分代碼:f=newFrame("Misty1算法");b1=newButton("加密");b2=newButton("解密");b1.addActionListener(this);b2.addActionListener(this);t1=newTextField("",20);t2=newTextField("",20);t3=newTextField("",20);t4=newTextField("",20);Labelk1,k2,k3,k4,k5,k6;k1=newLabel("明文(8字節(jié))");k2=newLabel("密鑰(16字節(jié))");k3=newLabel("密文(8字節(jié))");k4=newLabel("解密后的明文(8字節(jié))");k5=newLabel("");k6=newLabel("");f.setLayout(newGridLayout(4,3));f.add(k1);f.add(t1);f.add(k5);f.add(k2);f.add(t2);f.add(b1);f.add(k3);f.add(t3);f.add(b2);f.add(k4);f.add(t4);f.add(k6);f.pack();f.setVisible(true);處理按鈕事件當(dāng)用戶單擊按鈕時就發(fā)生一個事件。對于按鈕這個事件源,它有一個事件,就是單擊按鈕。這個事件源獲得監(jiān)視器的方法是:addActionListener()。處理該事件的接口是ActionListener,接口中的方法是actionPerformer(ActionEvente)。單擊按鈕事件的類型是ActionEvent類型,即當(dāng)用戶單擊按鈕后,Java包java.awt.envent中的類ActionEvent自動創(chuàng)建了一個事件對象。在用戶單擊按鈕后,將用戶在文本框中輸入的字符串?dāng)?shù)據(jù)轉(zhuǎn)換為數(shù)組數(shù)據(jù),傳入程序?qū)?yīng)的數(shù)組,然后程序調(diào)用函數(shù)進(jìn)行運(yùn)算,最后把得出的結(jié)果轉(zhuǎn)換為字符串?dāng)?shù)據(jù),輸出到指定文本框位置。按鈕事件處理部分代碼:publicvoidactionPerformed(ActionEvente)//接口實現(xiàn)方法{ 函數(shù)hxdx=new函數(shù)();//產(chǎn)生函數(shù)對象 if(e.getSource()==b1) { charplaintext1[]=(t1.getText()).toCharArray();charkey[]=(t2.getText()).toCharArray();charciphertext1[]=newchar[8]; hxdx.Encrypt(plaintext1,key,ciphertext1); t3.setText(String.valueOf(ciphertext1)); } elseif(e.getSource()==b2) { charkey[]=(t2.getText()).toCharArray(); charciphertext1[]=(t3.getText()).toCharArray(); charplaintext1[]=newchar[8]; hxdx.Decrypt(ciphertext1,key,pl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)一年級數(shù)學(xué)口算練習(xí)題大全
- 江西婺源茶業(yè)職業(yè)學(xué)院《高效焊接技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 華北理工大學(xué)輕工學(xué)院《中學(xué)美術(shù)課程標(biāo)準(zhǔn)與教材分析》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖北工程職業(yè)學(xué)院《放射性三廢處理與處置》2023-2024學(xué)年第一學(xué)期期末試卷
- 周口文理職業(yè)學(xué)院《智能自動化與控制網(wǎng)絡(luò)實訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶理工大學(xué)《機(jī)器人工程數(shù)學(xué)(2)》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江水利水電學(xué)院《區(qū)塊鏈技術(shù)及運(yùn)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州信息工程職業(yè)學(xué)院《Office高級應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 長江職業(yè)學(xué)院《動物分子與細(xì)胞生物學(xué)導(dǎo)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 云南財經(jīng)職業(yè)學(xué)院《國畫基礎(chǔ)(I)》2023-2024學(xué)年第一學(xué)期期末試卷
- 企業(yè)供應(yīng)鏈管理軟件使用合同
- 碳排放管理員 (碳排放核查員) 理論知識考核要素細(xì)目表三級
- 中考化學(xué)酸堿鹽知識點(diǎn)性質(zhì)歸納
- 新教科版四上科學(xué)3.5《運(yùn)動與摩擦力》教案(新課標(biāo))
- 四川省綿陽市2023-2024學(xué)年高一上學(xué)期期末檢測英語試題(解析版)
- 2024年中國電科集團(tuán)春季招聘公開引進(jìn)高層次人才和急需緊缺人才筆試參考題庫(共500題)答案詳解版
- 綠化養(yǎng)護(hù)服務(wù)整體養(yǎng)護(hù)方案
- 醫(yī)院護(hù)理培訓(xùn)課件:《壓力性損傷(壓瘡)的分期及預(yù)防》
- 小說訓(xùn)練-景物描寫的作用-高考語文二輪復(fù)習(xí)訓(xùn)練
- 手術(shù)室標(biāo)本管理
- 高速公路的歷史發(fā)展
評論
0/150
提交評論