版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、課程設計(論文)任務書 軟件軟件 學院 軟件工程軟件工程 專業(yè) 班 一、課程設計(論文)題目 加密與解密加密與解密 二、課程設計(論文)工作自 年 月 日起至 年 月 日止。 三、課程設計(論文) 地點: 四、課程設計(論文)內(nèi)容要求: 1本課程設計的目的本課程設計的目的 (1)使學生鞏固和提高 java 編程技術 (2)培養(yǎng)學生掌握程序設計的基本思路和方法; (3)加強學生研發(fā)、調(diào)試程序的能力; (4)培養(yǎng)學生分析、解決問題的能力; (5)提高學生的科技論文寫作能力。 2課程設計的任務及要求課程設計的任務及要求 1)任務:)任務: (1)設計 gui 界面的 hannoi 塔,用戶可以通過拖
2、動鼠標移動各個塔上的盤子,程序 也可以自動演示盤子的移動過程。; (2)有三個表示塔的對象,分別命名為 a、b 和 c。a 塔上有若干個盤子,盤子的大小 不等,并按著大小順序依次擺放在 a 塔上,大盤在下,小盤在上。用戶可以用鼠標拖 動盤子,把 a 塔上的盤子全部移動到另外兩個塔中的任何一個塔上。要求每次只能移 動一個盤子,在任何時候不允許大盤壓在小盤的上面。 (3)用戶也可以選擇讓程序自動演示。選擇自動演示后,程序?qū)⒁詣赢嬓问窖菔景?a 塔上的盤子全部移到 c 塔的過程,并將移動過程以文本形式顯示在一個文本區(qū)中。 2)創(chuàng)新要求:)創(chuàng)新要求: 在基本要求達到后,可進行創(chuàng)新設計,增加功能和游戲趣
3、味性。 3 3)課程設計論文編寫要求)課程設計論文編寫要求 (1)課程設計任務及要求 (2)需求分析 (3)設計思路-工作原理、功能規(guī)劃 (4)詳細設計-數(shù)據(jù)分析、算法思路、類設計、功能實現(xiàn)(含程序流程圖、主要代碼及 注釋)、界面等。 (4)運行調(diào)試與分析討論-給出運行屏幕截圖,分析運行結(jié)果,有何改進想法等。 (5)設計體會與小結(jié)-設計遇到的問題及解決辦法,通過設計學到了哪些新知識,鞏固 了哪些知識,有哪些提高。 (6)參考文獻(必須按標準格式列出,可參考教材后面的參考文獻格式) (7) 報告按規(guī)定排版打印,要求裝訂平整,否則要求返工; (8) 課設報告的裝訂順序如下:封面-任務書-中文摘要-
4、目錄-正文-附錄(代 碼及相關圖片) (9)嚴禁抄襲,如有發(fā)現(xiàn),按不及格處理。 4)答辯與評分標準:)答辯與評分標準: (1)考勤:10 分; (2)程序檢查:30 分; (3)答辯回答問題:20 分 (3)課程設計報告:40 分; 5)參考文獻:)參考文獻: (1)java語言程序設計教程邱桃榮 機械工業(yè)出版社 (2)java程序設計試驗指導陳軼 姚曉昆 清華大學出版社 6)課程設計進度安排)課程設計進度安排 內(nèi)容內(nèi)容 天數(shù)天數(shù)地點地點 構思及收集資料 7圖書館 編碼與調(diào)試 5實驗室 撰寫論文 3圖書館、實驗室 學生簽名: 年 月 日 課程設計課程設計( (論文論文) )評審意見評審意見 (
5、1)考勤(10 分):優(yōu)() 、良() 、中() 、一般() 、差() ; (2)程序檢查(30 分):優(yōu)() 、良() 、中() 、一般() 、差() ; (3)答辯回答問題(20 分):優(yōu)() 、良() 、中() 、一般() 、差() ; (4)設計報告(40 分):優(yōu)() 、良() 、中() 、一般() 、差() ; 評閱人: 職稱: 講師 年 月 日 前前 言言.- 3 - 一、題目分析一、題目分析.- 4 - 1.1 課程設計的要求和內(nèi)容(包括原始數(shù)據(jù)、技術要求、工作要求).- 4 - 1.2 相關知識介紹.- 5 - 二、概要設計二、概要設計.- 8 - 2.1 抽象數(shù)據(jù)類型的定義
6、 .- 8 - 2.2 主程序流程.- 9 - 2.3 各程序模塊之間的層次(調(diào)用)關系.- 9 - 三、詳細設計三、詳細設計.- 10 - 3.1 主函數(shù)模塊.- 10 - 3.2 加密模塊.- 11 - 3.3 加密操作模塊.- 13 - 3.4 解密模塊.- 13 - 3.5 解密操作模塊.- 14 - 3.6 轉(zhuǎn)換模塊.- 15 - 3.7 文件選擇模塊.- 16 - 3.8 密碼生成模塊.- 16 - 四、調(diào)試分析四、調(diào)試分析.- 18 - 4.1 調(diào)試過程中遇到的問題 .- 18 - 4.2 對設計與實現(xiàn)的回顧討論和分析.- 19 - 4.3 算法的時空分析.- 19 - 4.4
7、經(jīng)驗和體會.- 20 - 五、測試結(jié)果五、測試結(jié)果.- 20 - 5.1 加密 .- 20 - 5.2 解密 .- 21 - 六、主要參考資料六、主要參考資料.- 23 - 七、附錄七、附錄.- 23 - 摘 要 隨著網(wǎng)絡技術的不斷發(fā)展,人們的個人信息、網(wǎng)絡間的文件傳遞、電子商務等方面都 需要大力的保護,文件加密技術也就隨之產(chǎn)生。文件的加密主要是由加密算法實現(xiàn),加密 算法有多種,常見的有、等。本程序設計對文件的加密使用的是 加密算法。 java 語言具有簡單、安全、可移植、面向?qū)ο蟆⒔?、多線程、體系結(jié)構中立、解釋 執(zhí)行、高性能、分布式和動態(tài)等主要特點。利用 java 語言中秘密密鑰工廠對算法
8、的 支持,使程序?qū)崿F(xiàn)文件加密、解密兩大功能更簡單。 關鍵詞: java ; des; 加密; 解密; 前前 言言 des ( data encryption standard) 是一種世界標準的加密形式, 已經(jīng) 15 年歷史了, 雖然有些老, 可還算是比較可靠的算法。在七十的初期, 隨著計算機之間的通信發(fā)展, 需要有一種標準密碼算法為了限制不同算法的激增使它們之間不能互相對話。為解決這個 問題, 美國國家安全局(n.s.a ) 進行招標。 i.b.m 公司開發(fā)了一種算法, 稱為: lucifer。 經(jīng)過幾年的研討和修改, 這種算法, 成為了今天的 d.e.s,1976 年 11 月 23 日,
9、 終于被美國國家安全局采用。 d.e.s 是分塊加密的,將明文分割成 64 bits 的塊, 然后它們一個個接起來 。它使 用 56 位密鑰對 64 位的數(shù)據(jù)塊進行加密,并對 64bits 的數(shù)據(jù)塊進行 16 輪編碼。與每輪編 碼時,一個 48bits 的“每輪”密鑰值由 56bits 的完整密鑰得出來。des 用軟件進行解碼 需要用很長時間,而用硬件解碼速度非常快,1977 年,人們估計要耗資兩千萬美元才能建 成一個專門計算機用于 des 的解密,而且需要 12 個小時的破解才能得到結(jié)果。所以,當時 des 被認為是一種十分強壯的加密方法。但今天, 只需 二十萬美圓就可以制造一臺破譯 des
10、 的特殊的計算機,所以現(xiàn)在 des 對要求“強壯”加密的場合已經(jīng)不再適用了。 des 的唯一密碼學缺點,就是密鑰長度相對比較短,人們并沒有放棄使用 des,而是想 出了一個解決其長度問題的方法,即采用三重 des。加密成為三步, 而不是一步,每一步 的密鑰都不一樣, 這樣爆破就比較復雜了,這樣要找三個密鑰, 而不是一個, 每個密鑰 有 56 bits, 那樣我們就有 56 乘以三, 等于 168 bits。 本程序設計所采用的就是 des 的變種三重 des 算法。同時利用 java 的 gui 編程, 生成文本對話框,對文件的路徑進行選擇、提供密鑰框、加密和解密按鈕。 一、題目分析一、題目分
11、析 1.1 課程設計的要求和內(nèi)容(包括原始數(shù)據(jù)、技術要求、工作要 求) 基本要求: 1.利用某種加密算法對指定的文本文件進行加密(應判斷其是否已經(jīng)加密,若已加 密則結(jié)束該步驟,否則提示輸入加密口令,對文件進行加密) ; 2.加密解密方法:可使用 rsa,des,md5 等之一加密算法。 3 還應該提供解密功能。 1.2 相關知識介紹 1.2.11.2.1 desdes 算法描述算法描述 des 是一種分組加密算法,他以 64 位為分組對數(shù)據(jù)加密。64 位一組的明文從算法的一 端 輸入,64 位的密文從另一端輸出。des 是一個對稱算法:加密和解密用的是同一個算法 (除 密鑰編排不同以外) 。
12、密鑰的長度為 56 位(密鑰通常表示為 64 位的數(shù),但每個第 8 位都用作奇偶檢驗,可以 忽 略)。密鑰可以是任意的 56 位數(shù),且可以在任意的時候改變。 des 算法的入口參數(shù)有 3 個:key,data,mode。其中 key 為 8 個字節(jié)共 64 位,是 des 算法 的工作密鑰;data 也為 8 個字節(jié) 64 位,是要被加密或解密的數(shù)據(jù):mode 為 des 的工 作方式,有 兩種:加密或解密。 des 算法的工作過程:若 mode 為加密,則用 key 對數(shù)據(jù) data 進行加密,生成 data 的 密碼 形式(64 位)作為 des 的輸出結(jié)果;若 mode 為解密,則用 k
13、ey 對密碼形式的數(shù)據(jù) data 解密,還 原為 data 的明碼形式(64 位)作為 des 的輸出結(jié)果。 在通信網(wǎng)絡的兩端,雙方約定了一致的 key,在通信的源點用 key 對核心數(shù)據(jù)進行 des 加密 ,然后以密碼形式通過公共通信網(wǎng)(如電話網(wǎng))傳輸?shù)酵ㄐ啪W(wǎng)絡的終點,數(shù)據(jù)達到目 的 地后,用同樣的 key 對密碼數(shù)據(jù)進行解密,便再現(xiàn)了明碼形式的核心數(shù)據(jù)。這樣便保證 了核 心數(shù)據(jù)(如 pin,mac 等)在公共通信網(wǎng)中傳輸?shù)陌踩院涂煽啃浴Mㄟ^定期在通信 網(wǎng)絡的源 端和目的端同時改用新的 key,便能更進一步提高數(shù)據(jù)的保密性,這正是現(xiàn)在金 融界交易網(wǎng) 絡的流行作法。 簡單地說,算法只不過是加
14、密的一種基本技術,des 基本組建分組是這些技術的一種 組合 ,他基于密鑰作用于明文,這是眾所周知的輪(round) 。des 有 16 輪,這意味著要 在明文分 組上 16 次實施相同的組合技術。 1.2.21.2.2 desdes 算法詳述算法詳述 des 算法把 64 位的明文輸入塊變?yōu)?64 位的密文輸出塊,他所使用的密鑰也是 64 位, des 對 64 位的明文分組進行操作。通過一個初始置換,將明文分組分成左半部分和右半 部分,各 32 位 長。然后進行 16 輪相同的運算,這些相同的運算被稱為函數(shù) f,在運算過 程中數(shù)據(jù)和密 鑰相結(jié)合。經(jīng)過 16 輪運算后左、右部分在一起經(jīng)過一個
15、置換(初始置換的 逆置換) ,這樣算 法就完成了。 (1)初始置換 其功能是把輸入的 64 位數(shù)據(jù)塊按位重新組合,并把輸出分為 l0,r0 兩部分,每部分 各長 32 位,其置換規(guī)則如表 1 所示。 表表 1 1 5858 5050 4242 3434 2626 1818 1010 2 2 6060 5252 4444 3636 2828 2020 1212 4 4 6262 5454 4646 3838 3030 2222 1414 6 6 6464 5656 4848 4040 3232 2424 1616 8 8 5757 4949 4141 3333 2525 1717 9 9 1 1
16、 5959 5151 4343 3535 2727 1919 1111 3 3 6161 5353 4545 3737 2929 2121 1313 5 5 6363 5555 4747 3939 3131 2323 1515 7 7 即將輸入的第 58 位換到第 1 位,第 50 位換到第 2 位,依次類推,最后一位是原來的 第 7 位,l0,r0 則是換位輸出后的兩部分,l0 是輸出的左 32 位,r0 是右 32 位。例:設 置換前 的輸入值為 d1d2d3d64,則經(jīng)過初始置換后的結(jié)果為: l0=d58d50d8;r0=d57d497。 (2)逆置換 經(jīng)過 16 次迭代運算后,得到 l
17、16,r16,將此作為輸入進行逆置換,即得到密文輸出。 逆置換正好是初始置換的逆運算。例如,第 1 位經(jīng)過初始置換后,處于第 40 位,而通過 逆置換,又將第 40 位換回到第 1 位,其逆置換的規(guī)則如表 2 所示。 表表 2 2 4040 8 8 4848 1616 5656 2424 6464 3232 3939 7 7 4747 1515 5555 2323 6363 3131 3838 6 6 4646 1414 5454 2222 6262 3030 3737 5 5 4545 1313 5353 2121 6161 2929 3636 4 4 4444 1212 5252 2020
18、 6060 2828 3535 3 3 4343 1111 5151 1919 5959 2727 3434 2 2 4242 1010 5050 1818 5858 2626 3333 1 1 4141 9 9 4949 1717 5757 2525 (3)函數(shù) f(ri,ki)的計算 其算法描述如圖 1 所示。 圖 1 li-1ri-1密鑰 擴展置換 s 盒置 換 li ri 移位移位 s 盒置換 密鑰 p 盒置換 在圖 1 中, “擴展置換”是將 32 位放大成 48 位, “p 盒置換”是 32 位到 32 位換位, 其換位 規(guī)則分別如表 3、表 4 所示。 表表 3 3 擴展置換表擴
19、展置換表 3232 1 1 2 2 3 3 4 4 5 5 4 4 5 5 6 6 7 7 8 8 9 9 8 8 9 9 1010 1111 1212 1313 1212 1313 1414 1515 1616 1717 1616 1717 1818 1919 2020 2121 2020 2121 2222 2323 2424 2525 2424 2525 2626 2727 2828 2929 2828 2929 3030 3131 3232 1 1 表表 4 4 p p 盒置換表盒置換表 1616 7 7 2020 2121 2929 1212 2828 1717 1 1 1515 2
20、323 2626 5 5 1818 3131 1010 2 2 8 8 2424 1414 3232 2727 3 3 9 9 1919 1313 3030 6 6 2222 2121 4 4 2525 在 f(ri,ki)算法描述圖中,s1,s2.s8 為選擇函數(shù),其功能是把 6bit 數(shù)據(jù)變?yōu)?4bit 數(shù)據(jù)。 下面給出選擇函數(shù) si(i=1,2.8)的功能表: 選擇函數(shù) si s1: 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,
21、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,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,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,
22、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, s4: 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,
23、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, 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
24、,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, 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
25、中,共有 4 行數(shù)據(jù),命名為 0,1、2、3 行;每行有 16 列,命名為 0、1、2、3,.,14、15 列。 現(xiàn)設輸入為: dd1d2d3d4d5d6 令:列d2d3d4d5 行d1d6 然后在 s1 表中查得對應的數(shù),以 4 位二進制表示,此即為選擇函數(shù) s1 的輸出。 (4)子密鑰 ki(48 b)的生成算法 開始,由于不考慮每個字節(jié)的第 8 位,des 的密鑰從 64 位變?yōu)?48 位,如表 5 所示, 首先 56 位 密鑰被分成兩個部分,每部分 28 位,然后根據(jù)輪數(shù),兩部分分別循環(huán)左移 l 或 2 位。 表表 5 5 密鑰置換密鑰置換 5757 4949 4141 3333 25
26、25 1717 9 9 1 1 5858 5050 4242 3434 2626 1818 1010 2 2 5959 5151 4343 3535 2727 1919 1111 3 3 6060 5252 4444 3636 6363 5555 4747 3939 3131 2323 1515 7 7 6262 5454 4646 3838 3030 2222 1414 6 6 6161 5353 4545 3737 2929 2121 1313 5 5 2828 2020 1212 4 4 des 算法規(guī)定,其中第 8,16,64 位是奇偶校驗位,不參與 des 運算。故 key 實 際可
27、用 位數(shù)只有 56 位。即:經(jīng)過密鑰置換表的變換后,key 的位數(shù)由 64 位變成了 56 位, 此 56 位分為 c 0,d0 兩部分,各 28 位,然后分別進行第一次循環(huán)左移,得到 c1,d1,將 c1(28 位),d1(28 位 )合并得到 56 位,再經(jīng)過壓縮置換,從而便得到了密鑰 k0(48 位)。 依次類推,便可得到 k1,k 2,k15。需要注意的是,16 次循環(huán)左移對應的左移位數(shù)要 依據(jù)表 6 所示的規(guī)則進行。 表表 6 6 循環(huán)左移位數(shù)循環(huán)左移位數(shù) 輪 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 位數(shù) 1 1 2 2 2 2 2 2 1 2
28、2 2 2 2 2 1 以上介紹了 des 算法的加密過程。des 算法的解密過程是一樣的,區(qū)別僅在于第一次迭 代時用子密鑰 k15,第二次是 k14,最后一次用 k0,算法本身并沒有任何變化。 二、概要設計二、概要設計 2.1 抽象數(shù)據(jù)類型的定義 2.1.12.1.1 程序所需要引入的包:程序所需要引入的包: import java.awt.*; /包含用于創(chuàng)建用戶界面和繪制圖形圖像的所有類。 import java.awt.event.*; /提供處理由 awt 組件所激發(fā)的各類事件的接口和類。 import javax.swing.*; /提供一組“輕量級”(全部是 java 語言)組件
29、,盡量讓 這些組件在所有平臺上的工作方式都相同。 import java.io.*; /通過數(shù)據(jù)流、序列化和文件系統(tǒng)提供系統(tǒng)輸入和輸出。 import java.security.*; /為安全框架提供類和接口。 import javax.crypto.*; /為 cryptographic(加密)操作提供類和接口。 import javax.crypto.spec.*; / 為密鑰規(guī)范和算法參數(shù)規(guī)范提供類和接口。 2.1.22.1.2 其他定義:其他定義: new flowlayout() 對文件加密器對話框采用 flowlayout 管理器。 new actionlistener() 對文
30、件的加密和解密設置事件監(jiān)聽器。 byte bytk1、 byte bytk2 、byte bytk3 密鑰分三部分,采用字節(jié)數(shù)組保存數(shù)據(jù)。 2.2 主程序流程 是是否否 否否 開始 彈出文件加密器對話框 輸入文件路徑和密鑰 密鑰長度等于 48? 加密或解密 解密 文件是否已 加密 加密 生成機密文件生成解密文件 圖圖 2 2 主程序流程圖主程序流程圖 2.3 各程序模塊之間的層次(調(diào)用)關系 2.3.12.3.1 模塊定義模塊定義 主函數(shù)模塊: 生成加密器框體;獲取數(shù)據(jù)的輸入;調(diào)用加密或解密函數(shù)。 加密模塊: 判斷密鑰是否合法和文件是否已加密,啟動加密操作,顯示操作結(jié)果,并在與源文件 同一文件
31、夾下生成密文。 加密操作模塊: 用 des 方法加密輸入的字節(jié)并返回。 解密模塊: 判斷密鑰是否合法,啟動解密操作,顯示操作結(jié)果,并在指定的文件路徑下生成明文。 解密操作模塊: 用 des 方法解密輸入的字節(jié)并返回。 轉(zhuǎn)換模塊: 轉(zhuǎn)換模塊一:輸入密碼的字符形式,返回字節(jié)數(shù)組形式。 轉(zhuǎn)換模塊二:計算一個 16 進制字符的 10 進制值。 文件選擇模塊: 選擇需要加密或解密的文件。 密碼生成模塊: 隨機生成或用獲得的密鑰,用 des 算法對密鑰進行操作。 2.3.2 層次層次(調(diào)用調(diào)用)關系關系 結(jié)束 文件加密器模塊 加密模塊 密碼生成模塊 加密操作模塊 轉(zhuǎn)換模塊一 文件選擇模塊 解密模塊 解密操
32、作模塊 轉(zhuǎn)換模塊二 圖圖 3 3 層次(調(diào)用)關系層次(調(diào)用)關系 三、詳細設計三、詳細設計 3.1 主函數(shù)模塊 代碼實現(xiàn):代碼實現(xiàn): public class fileencrypter extends jframe /fileencrypter 繼承 jframe 類 public static final int width = 550; /定義不可變的寬度值為 550 public static final int height = 200; /定義不可變的高度值為 200 public static void main(string args) /新建一個可見的框體 fileencr
33、ypter fe = new fileencrypter(); fe.show(); fileencrypter() this.setsize(width,height); this.setdefaultcloseoperation(jframe.exit_on_close); this.setresizable(false); toolkit tk = toolkit.getdefaulttoolkit(); dimension screensize = tk.getscreensize(); this.setlocation(screensize.width - width)/2, (sc
34、reensize.height - height)/2); this.settitle(文件加密器(tirdes); /以上設置新建框體的標題;框體 的寬度和高度;關閉時的操作;框體大小不可變;框體在屏幕上顯示的位置。 container c = this.getcontentpane(); /創(chuàng)建容器 c c.setlayout( new flowlayout(); /c 采用 flowlayout 布局管理 final filepanel fp = new filepanel(文件選擇); c.add(fp); /添加名為“文件選擇”面板 final keypanel pp = new k
35、eypanel(密碼); c.add(pp); /添加名為“密碼”面板 jbutton jbe = new jbutton(加密); c.add(jbe); /添加加密按鈕 jbe.addactionlistener(new actionlistener() /設置加密監(jiān)聽器 public void actionperformed(actionevent event) file file = new file(fp.getfilename(); if(file.exists()encrypt(file.getabsolutefile(),pp.getkey(); else joptionpan
36、e.showmessagedialog( null,請選擇文件!,提示 ,joptionpane.ok_option); ); jbutton jbd = new jbutton(解密); c.add(jbd); /添加解密按鈕 jbd.addactionlistener(new actionlistener() /設置解密監(jiān)聽器 public void actionperformed(actionevent event) file file = new file(fp.getfilename(); if(file.exists()decrypt(file.getabsolutefile(),
37、pp.getkey(); else joptionpane.showmessagedialog(null,請選擇文件!,提示 ,joptionpane.ok_option); ); 3.2 加密模塊 入口參數(shù):指定的文件和密鑰 出口值:文件已加密,提示“文件已加密!” 加密成功,提示“加密成功!”并輸出加密后的密文 密碼長度不等于 48,提示“密碼長度必須等于 48!” 拋出異常。 代碼實現(xiàn):代碼實現(xiàn): private void encrypt(file filein,string skey) try if(skey.length() = 48) /密鑰長度等于 48 成立 byte bytk
38、1 = getkeybystr(skey.substring(0,16); /密鑰前 16 位 返回的字節(jié)數(shù)組保存到數(shù)組 bytk1 byte bytk2 = getkeybystr(skey.substring(16,32);/密鑰中 16 位 返回的字節(jié)數(shù)組保存到數(shù)組 bytk2 byte bytk3 = getkeybystr(skey.substring(32,48);/密鑰后 16 位 返回的字節(jié)數(shù)組保存到數(shù)組 bytk3 string strpath = filein.getpath(); if(strpath.substring(strpath.length()- 5).tolo
39、wercase().equals(.tdes) /判斷文件是否已加密,加密則輸出信息并返回 joptionpane.showmessagedialog(this,該文件已加密!,提示 ,joptionpane.ok_option); return; else fileinputstream fis = new fileinputstream(filein); byte bytin = new byte(int)filein.length(); for(int i = 0;i filein.length();i+) bytini = (byte)fis.read(); /加密 byte byto
40、ut = encryptbydes(encryptbydes(encryptbydes(bytin,bytk1),bytk2),bytk3); /反復調(diào)用加密操作模塊 string fileout = filein.getpath() + .tdes; /文件名后上 “.tdes”作為密文的標記。 fileoutputstream fos = new fileoutputstream(fileout); for(int i = 0;i bytout.length;i+) fos.write(int)bytouti); fos.close(); /輸出密文 joptionpane.showmes
41、sagedialog(this,加密成功!,提示 ,joptionpane.ok_option); / 給出“加密成功”信息 else joptionpane.showmessagedialog( this,密碼長度必須等于 48!, 錯誤信息,joptionpane.error_message); /給出“密碼長度必須等于 48”信息 catch(exception e) / 異常處理操作 e.printstacktrace(); 3.3 加密操作模塊 入口參數(shù):字節(jié)數(shù)組 出口值:經(jīng) des 算法加密過的字節(jié)數(shù)組 代碼實現(xiàn):代碼實現(xiàn): private byte encryptbydes(by
42、te bytp,byte bytkey) throws exception deskeyspec desks = new deskeyspec(bytkey); /新建一個 deskeyspec 對象, bytkey 位密鑰 secretkeyfactory skf = secretkeyfactory.getinstance(des); /用秘密密鑰 工廠生成 des 密鑰規(guī)范。 secretkey sk = skf.generatesecret(desks); /根據(jù)密鑰規(guī)范生成密鑰 cipher cip = cipher.getinstance(des); /生成一個 des 轉(zhuǎn)換的 c
43、ipher 對象 cip.init(cipher.encrypt_mode,sk); /用密鑰和加密模式初始化 cip return cip.dofinal(bytp); 3.4 解密模塊 入口參數(shù):指定文件路徑和密鑰 出口值:不是密文,提示“不是合法的加密文件!” 解密成功,提示“解密成功”并按指定路徑給出解密明文 密碼長度不等于 48,提示“密碼長度必須等于 48!” 密碼錯誤,異常處理,提示“解密失敗,請核對密碼!” 代碼實現(xiàn):代碼實現(xiàn): private void decrypt(file filein,string skey) try if(skey.length() = 48) /密
44、鑰長度等于 48 成立 string strpath = filein.getpath(); if(strpath.substring(strpath.length()-5).tolowercase().equals(.tdes) strpath = strpath.substring(0,strpath.length()-5); /判斷指定文件是否是密文,不是則返回 else joptionpane.showmessagedialog(this,不是合法的加密文件!,提示 ,joptionpane.ok_option); return; jfilechooser chooser = new
45、jfilechooser(); chooser.setcurrentdirectory(new file(.); chooser.setselectedfile(new file(strpath); /用戶指定要保存的文件 int ret = chooser.showsavedialog(this); if(ret=jfilechooser.approve_option) byte bytk1 = getkeybystr(skey.substring(0,16); byte bytk2 = getkeybystr(skey.substring(16,32); byte bytk3 = getk
46、eybystr(skey.substring(32,48); fileinputstream fis = new fileinputstream(filein); byte bytin = new byte(int)filein.length(); for(int i = 0;i filein.length();i+) bytini = (byte)fis.read(); /解密 byte bytout = decryptbydes(decryptbydes(decryptbydes(bytin,bytk3),bytk2),bytk1); /反復調(diào)用加密操作模塊 file fileout =
47、chooser.getselectedfile(); fileout.createnewfile(); fileoutputstream fos = new fileoutputstream(fileout); for(int i = 0;i bytout.length;i+) fos.write(int)bytouti); fos.close(); /按指定路徑輸出明文 joptionpane.showmessagedialog(this,解密成功!,提示 ,joptionpane.ok_option); else joptionpane.showmessagedialog(this,密碼長
48、度必須等于 48!,錯 誤信息,joptionpane.error_message); catch(exception e) joptionpane.showmessagedialog(this,解密失敗,請核對密碼!,提示 ,joptionpane.ok_option); /異常處理 3.5 解密操作模塊 入口參數(shù):字節(jié)數(shù)組 出口值:經(jīng) des 算法解密過的字節(jié)數(shù)組 代碼實現(xiàn):代碼實現(xiàn): private byte decryptbydes(byte byte,byte bytkey) throws exception deskeyspec desks = new deskeyspec(byt
49、key); secretkeyfactory skf = secretkeyfactory.getinstance(des); secretkey sk = skf.generatesecret(desks); cipher cip = cipher.getinstance(des); cip.init(cipher.decrypt_mode,sk); /用密鑰和解密模式初始話 cip return cip.dofinal(byte); 3.6 轉(zhuǎn)換模塊 3.6.13.6.1 轉(zhuǎn)換模塊一轉(zhuǎn)換模塊一 入口參數(shù):密碼的字符形式 出口值:字節(jié)數(shù)組形式 代碼實現(xiàn):代碼實現(xiàn): private byte
50、getkeybystr(string str) byte bret = new bytestr.length()/2; /新建字節(jié)數(shù)組,長度為字符串的一半 for(int i=0;i str.length()/2;i+) integer itg =new integer(16*getchrint(str.charat(2*i)+ getchrint(str.charat(2*i+1); /從 0 位開始,偶數(shù)位轉(zhuǎn)換為 10 進制乘 16 加上奇數(shù)為 轉(zhuǎn)換為 10 進制所得的值復給 itg breti = itg.bytevalue(); return bret; 3.6.23.6.2 轉(zhuǎn)換模塊
51、二轉(zhuǎn)換模塊二 入口參數(shù):單個字符 出口值: 字符從 16 進制轉(zhuǎn)換成的 10 進制數(shù) 代碼實現(xiàn):代碼實現(xiàn): private int getchrint(char chr) int iret=0; /初值為 0 if(chr=0.charat(0) iret = 0; if(chr=1.charat(0) iret = 1; if(chr=2.charat(0) iret = 2; if(chr=3.charat(0) iret = 3; if(chr=4.charat(0) iret = 4; if(chr=5.charat(0) iret = 5; if(chr=6.charat(0) ir
52、et = 6; if(chr=7.charat(0) iret = 7; if(chr=8.charat(0) iret = 8; if(chr=9.charat(0) iret = 9; if(chr=a.charat(0) iret = 10; if(chr=b.charat(0) iret = 11; if(chr=c.charat(0) iret = 12; if(chr=d.charat(0) iret = 13; if(chr=e.charat(0) iret = 14; if(chr=f.charat(0) iret = 15; return iret; 3.7 文件選擇模塊 出
53、口值:被選文件的路徑 代碼實現(xiàn):代碼實現(xiàn): class filepanel extends jpanel filepanel(string str) jlabel label = new jlabel(str); jtextfield filetext = new jtextfield(35); jbutton choosebutton = new jbutton(瀏覽.); this.add(label); this.add(filetext); this.add(choosebutton); clickaction ca = new clickaction(this); choosebut
54、ton.addactionlistener(ca);/在面板加入文本框, “瀏覽”按鈕,設 置按鈕監(jiān)聽器 public string getfilename() /容器中第一個組件為文本框 jtextfield jtf = (jtextfield)this.getcomponent(1); return jtf.gettext(); private class clickaction implements actionlistener /由類實現(xiàn)接口 clickaction(component c) cmpt = c; public void actionperformed(actioneve
55、nt event) /觸發(fā)執(zhí)行操作 jfilechooser chooser = new jfilechooser(); chooser.setcurrentdirectory(new file(.); int ret = chooser.showopendialog(cmpt); if(ret=jfilechooser.approve_option) jpanel jp = (jpanel)cmpt; jtextfield jtf = (jtextfield)jp.getcomponent(1); jtf.settext(chooser.getselectedfile().getpath()
56、; /彈出文件選擇框, 選擇文件,返回當前文件的路徑 private component cmpt; 3.8 密碼生成模塊 class keypanel extends jpanel keypanel(string str) jlabel label = new jlabel(str); jtextfield filetext = new jtextfield(35); jbutton choosebutton = new jbutton(隨機產(chǎn)生); this.add(label); this.add(filetext); this.add(choosebutton); clickactio
57、n ca = new clickaction(this); choosebutton.addactionlistener(ca); /返回生成的密碼(48 個字符長度) public string getkey() jtextfield jtf = (jtextfield)this.getcomponent(1); return jtf.gettext(); private class clickaction implements actionlistener clickaction(component c) cmpt = c; public void actionperformed(acti
58、onevent event) try keygenerator kg = keygenerator.getinstance(des); /按 des 密鑰規(guī)范 生成密鑰生成器 kg.init(56); /初始化,密鑰長度為 56 key ke = kg.generatekey(); byte bytk1 = ke.getencoded(); ke = kg.generatekey(); byte bytk2 = ke.getencoded(); ke = kg.generatekey(); byte bytk3 = ke.getencoded(); jpanel jp = (jpanel)cm
59、pt; jtextfield jtf = (jtextfield)jp.getcomponent(1); jtf.settext(getbytestr(bytk1)+getbytestr(bytk2)+getbytestr(bytk3); catch(exception e) /異常處理 e.printstacktrace(); private string getbytestr(byte byt) /將密碼轉(zhuǎn)換為 16 進制 string strret = ; for(int i=0;i byt.length;i+) strret += gethexvalue(byti strret +=
60、gethexvalue(byti return strret; private string gethexvalue(int s) /轉(zhuǎn)換為 16 進制字符形式 string sret=null; switch (s) case 0: sret = 0;break; case 1: sret = 1;break; case 2: sret = 2;break; case 3: sret = 3;break; case 4: sret = 4;break; case 5: sret = 5;break; case 6: sret = 6;break; case 7: sret = 7;break
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 參加教師培訓心得(5篇)
- 營銷的培訓心得5篇
- 生活垃圾資源化處理項目可行性研究報告
- 幼兒園家園共育工作計劃(3篇)
- 高三的精彩演講稿800字怎么寫(素材稿件8篇)
- 財務部員工工作總結(jié)范文(10篇)
- 年會員工個人發(fā)言稿范文10篇(全文)
- 居住小區(qū)景觀養(yǎng)護服務合同
- 費用報銷政策
- 小學二年級學生家長會講話稿5篇
- 湖南美術出版社六年級上冊《書法練習指導》表格教案
- 投標項目進度計劃
- 中醫(yī)腦病科缺血性中風(腦梗死恢復期)中醫(yī)診療方案臨床療效分析總結(jié)
- 部編版語文二年級上冊《語文園地三我喜歡的玩具》(教案)
- 軟件開發(fā)項目驗收方案
- 崗位整合整治與人員優(yōu)化配置實施細則
- 康復治療技術的職業(yè)規(guī)劃課件
- 蜜雪冰城營銷案例分析總結(jié)
- 交換機CPU使用率過高的原因分析及探討
- 易制毒化學品安全管理崗位責任分工制度
- 住宿服務免責聲明
評論
0/150
提交評論