版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 綜合實(shí)踐課程設(shè)計(jì)</b></p><p> 題 目 基于java的文件加密解密設(shè)計(jì)</p><p> 學(xué) 院 通信與電子工程學(xué)院 </p><p> 專業(yè)班級(jí) 通信工程112班 &
2、lt;/p><p> 學(xué)生姓名 張 </p><p> 指導(dǎo)教師 </p><p> 2014年 12 月 31</p><p><b> 摘 要</b></p>
3、<p> 自從Java技術(shù)出現(xiàn)以業(yè),有關(guān)Java平臺(tái)的安全性用由Java技術(shù)發(fā)展所引發(fā)的安全性問題,引起了越來越多的關(guān)注。目前,Java已經(jīng)大量應(yīng)用于各個(gè)領(lǐng)域,研究Java的安全性對(duì)于更好地利用Java具有深遠(yuǎn)的意義。</p><p> 使用Java的安全機(jī)制設(shè)計(jì)和實(shí)現(xiàn)安全系統(tǒng)更具有重要的應(yīng)用價(jià)值。本課程設(shè)計(jì),一共有四個(gè)模塊分別為窗口模塊、登錄模塊、加密模塊、解密模塊,其中加密、解密模塊是兩個(gè)核心模
4、塊。實(shí)現(xiàn)了帶指定用戶登錄窗口并且登錄后登錄窗口自動(dòng)關(guān)閉,運(yùn)用“ab互換”的簡單算法實(shí)現(xiàn)對(duì)文件加密解密,對(duì)文件加密后原文件自動(dòng)刪除,對(duì)文件解密后加密后的文件自動(dòng)刪除的完整的文件加密解密設(shè)計(jì)。目前,用于文件加密解密的方法有很多,但大多數(shù)比較復(fù)雜,不太適合于對(duì)容量較大的文件進(jìn)行加密,本次用Java設(shè)計(jì)的文件加密解密方法簡單,運(yùn)行時(shí)間短,適合對(duì)大容量的文件進(jìn)行加密,有很高的利用價(jià)值。</p><p> 關(guān)鍵詞:窗口模塊
5、;登錄模塊;加密模塊;解密模塊;算法</p><p><b> Abstract</b></p><p> Since the advent of Java technology in industry, about the safety of the Java platform used by Java technology development caused
6、 by security issues, has attracted more and more attention. At present, the Java has a lot of applications in various fields, research the Java security for better use of Java has far-reaching significance.</p>&l
7、t;p> Security mechanism design and implementation using Java security system has important application value This course design, a total of four modules respectively window module, login module, encryption, decryptio
8、n module, the module, the encryption and decryption module is two core modules Implements the specified user login window and login window automatically shut down after the login, using the "ab swap" simple alg
9、orithm to decrypt the file encryption, the original file automatically deleted </p><p> Keywords: window module; The login module; Encryption module; Decryption module; algorithm </p><p><b&
10、gt; 目 錄</b></p><p><b> 摘 要I</b></p><p> AbstractII</p><p><b> 第1章 緒論1</b></p><p><b> 1.1 概述1</b></p><p>
11、; 1.2 研究現(xiàn)狀1</p><p> 1.3 應(yīng)用現(xiàn)狀2</p><p> 第2章 系統(tǒng)整體設(shè)計(jì)思路3</p><p> 2.1 程序操作流程圖3</p><p> 2.2 實(shí)現(xiàn)整體功能簡介4</p><p> 第3章 系統(tǒng)各模塊的簡介5</p><p>
12、3.1 窗口操作模塊5</p><p> 3.1.1 窗口設(shè)計(jì)過程5</p><p> 3.1.2 實(shí)現(xiàn)所用關(guān)鍵代碼簡述6</p><p> 3.2 登錄操作模塊7</p><p> 3.2.1 登錄設(shè)計(jì)過程7</p><p> 3.2.2 實(shí)現(xiàn)所用關(guān)鍵代碼簡述7</p><
13、;p> 3.3 加密操作模塊9</p><p> 3.3.1 加密設(shè)計(jì)過程9</p><p> 3.3.2 實(shí)現(xiàn)所用關(guān)鍵代碼簡述10</p><p> 3.4 解密操作模塊11</p><p> 3.4.1 解密設(shè)計(jì)過程12</p><p> 3.4.2 實(shí)現(xiàn)所用關(guān)鍵代碼簡述12<
14、;/p><p> 第4章 運(yùn)行調(diào)試14</p><p> 4.1 加密模塊14</p><p> 4.2 解密模塊15</p><p><b> 參考文獻(xiàn)17</b></p><p><b> 附錄18</b></p><p>&
15、lt;b> 致謝24</b></p><p><b> 第1章 緒論</b></p><p><b> 1.1 概述</b></p><p> 自從Java技術(shù)出現(xiàn)以后,有關(guān)Java技術(shù)發(fā)展所引發(fā)的安全性問題,引起了越來越多的關(guān)注。Java語言具有簡單、安全、可移植、面向?qū)ο?、多線程、體系結(jié)構(gòu)
16、中立、高性能、分布式和動(dòng)態(tài)等主要特點(diǎn)。Java是一門很優(yōu)秀的編程語言,是目前軟件設(shè)計(jì)中極為健壯的編程語言。Java不僅可以用來開發(fā)大型的應(yīng)用程序,而且特別適合Internet的應(yīng)用開發(fā)。Java確實(shí)具備了“一次寫成,處處運(yùn)行”的特點(diǎn),所以,Java已經(jīng)成為網(wǎng)絡(luò)時(shí)代最重要的編程語言之一。目前,Java已經(jīng)大量應(yīng)用于各個(gè)領(lǐng)域,研究Java的安全性對(duì)于更好地利用Java具有深遠(yuǎn)的意義。使用Java的安全機(jī)制設(shè)計(jì)和實(shí)現(xiàn)安全系統(tǒng)更具有重要的應(yīng)用價(jià)
17、值。本程序充分利用Java語言的特點(diǎn),針對(duì)當(dāng)下社會(huì)比較重視的文件加密,設(shè)計(jì)了本程序。</p><p><b> 1.2 研究現(xiàn)狀</b></p><p> 幾十年前IT技術(shù)的出現(xiàn)給信息的傳播方式和人與人之間、國家之間甚至整個(gè)世界的交流帶來了很多變化。如今,隨著密碼分析方面新技術(shù)的激增,信息安全是包治百病的靈丹妙藥。 每個(gè)人都可以獲得公開的算法,沒人能保證算法不被
18、一些組織或潛在攻擊者所破解[1]。唯一能夠確定的,或有理由確定的是,根據(jù)一些學(xué)術(shù)文獻(xiàn)所描述,一個(gè)攻擊者至少是在同一水平上破解密碼。 事實(shí)上,保護(hù)文件安全的需要變得不僅僅是必要,因此便有了《使用AES和MD5對(duì)正常文件進(jìn)行加密解密的研究》這篇論文中的想法。這是因?yàn)锳ES是一個(gè)最新的加密算法,能夠更有效地保護(hù)文件。同樣值得注意的是,整個(gè)研究中使用了DES密碼,因?yàn)椴徽摵螘r(shí)數(shù)據(jù)存儲(chǔ)的問題被提出來,它都是被使用的最常見和最基本的密碼。因此,可能
19、一個(gè)算法不公開的自定義密碼,如果能夠設(shè)計(jì)和測試得很好,它也可以適合于存儲(chǔ)單個(gè)用戶在磁盤上的敏感數(shù)據(jù),或者也可以使用帶有強(qiáng)密鑰的混合加密算法。 在描述整個(gè)加密過程中,我們使用HHEA算法來驗(yàn)證加密消息“hi”的過程。整個(gè)過程包括了生成密鑰的隨機(jī)向量(V)的定義,之后這個(gè)向量會(huì)被初始化[2]。 在整個(gè)研究工作中,著重強(qiáng)調(diào)了三篇綜述文章和算法,首先,可以使</p><p><b> 1.3 應(yīng)用現(xiàn)狀<
20、/b></p><p> 隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,人們的個(gè)人信息、網(wǎng)絡(luò)間的文件傳電子商務(wù)等方面都需要大力的保護(hù),文件加密技術(shù)也就隨之產(chǎn)生。文件加密解密是科技飛速發(fā)展中的通信安全保密問題的最終結(jié)果,無論是當(dāng)今還是未來計(jì)算機(jī)信息的保密問題顯得越來越重要。無論是個(gè)人信息通信還是電子商務(wù)發(fā)展,都迫切需要保證Internet網(wǎng)上信息傳輸?shù)陌踩?。信息安全已不僅僅局限于政治,軍事以及外交領(lǐng)域,現(xiàn)在與我們的日常生活息息相
21、關(guān)?,F(xiàn)在,密碼學(xué)理論和技術(shù)已得到迅速的發(fā)展,它是信息科學(xué)和技術(shù)中的一個(gè)重要研究領(lǐng)域。信息安全的核心是密碼技術(shù)。文件加密是一種常見的密碼學(xué)應(yīng)用。文件加密主要是由加密算法實(shí)現(xiàn),加密算法有多種,常見的有RSA、DES、MD5等[4]。</p><p> 第2章 系統(tǒng)整體設(shè)計(jì)思路</p><p> 2.1 程序操作流程圖</p><p> 程序操作流程如圖2-1所示
22、。</p><p> T </p><p> 圖2-1 程序操作流程圖</p><p> 本次課程設(shè)計(jì)所設(shè)計(jì)的程序,首先獲取一個(gè)待加密的文件,然后彈出用戶登錄界面,輸入用戶名及密碼,如果二者不相符則不能進(jìn)行加密,返回一個(gè)報(bào)錯(cuò)信息,過程結(jié)束;如果二者相符則彈出可以找到待
23、加密文件的存儲(chǔ)路徑的對(duì)話框,選中該文件將其擴(kuò)展名和內(nèi)容按加密算法更改,保存到指定的新存儲(chǔ)路徑中,加密成功,過程結(jié)束。解密過程是加密過程的反過程,當(dāng)有需要時(shí)再對(duì)文件按與加密過程相同的操作流程解密。</p><p> 2.2 實(shí)現(xiàn)整體功能簡介</p><p> 在做加密解密工具時(shí)首先確定的是界面的設(shè)計(jì),此工具的主界面主要有三個(gè)標(biāo)簽:加密、解密、路徑設(shè)置。加密標(biāo)簽界面里設(shè)計(jì)了四個(gè)panel
24、工具,主要用于實(shí)現(xiàn)文件的加密功能,當(dāng)向panel1或panel2拖入要加密的文件時(shí)它會(huì)彈出一個(gè)要輸入密碼的對(duì)話框,此界面的下方有一個(gè)textbox用于接收傳進(jìn)來的文件路徑。在解密標(biāo)簽的窗口中的界面基本上與加密標(biāo)簽里一樣,但用于實(shí)現(xiàn)文件的解密功能。加密解密工具中的路徑設(shè)置用于設(shè)置加密解密文件存放路徑,這一塊中要分兩個(gè)區(qū)域:加密文件路徑設(shè)置區(qū)(groupBox1)和解密文件路徑設(shè)置區(qū)(groupBox2),在groupBox1標(biāo)簽中有兩個(gè)單
25、選按鈕:radiobutton1設(shè)置的路徑與原文件路徑相同和radiobutton2設(shè)置了自定義的路徑,一個(gè)文本框按鈕(textbox3)一個(gè)選擇button按鈕。Button按鈕是獲得文件存儲(chǔ)的路徑,得到路徑后就會(huì)把路徑傳給文本框按鈕textBox3,textBox3的作用是將從button那得到的路徑傳加密標(biāo)簽是的textBox1。解密文件路徑設(shè)置區(qū)的設(shè)計(jì)也和加密文件路徑設(shè)置區(qū)一樣。在設(shè)計(jì)時(shí)還要用到兩個(gè)對(duì)話框,用于設(shè)置加密或<
26、/p><p> 第3章 系統(tǒng)各模塊的簡介</p><p> 3.1 窗口操作模塊</p><p> 設(shè)計(jì)窗口操作模塊,主要用來實(shí)現(xiàn)用戶登陸及文件加密解密時(shí)所用的界面,其上設(shè)有用戶登陸名、登錄密碼、確認(rèn)、文件加密、文加解密這幾個(gè)必備的按鈕,有時(shí)為了保密需要或管理需要,還可以添加一些其他的操作按鈕。本次課程設(shè)計(jì)完成了簡單而實(shí)用的用戶登錄及加密解密窗口。</p
27、><p> 3.1.1 窗口設(shè)計(jì)過程</p><p> 登錄窗口的設(shè)計(jì):首先建立一個(gè)窗體,然后在窗體上添加一個(gè)面板,用來承載所添加的組件。本次設(shè)計(jì)中需要的組件為用戶名“尊姓大名”,密碼“暗號(hào)”,確認(rèn)登錄“叮咚”三個(gè)按鈕,用來填寫用戶名和密碼的兩個(gè)文本框,如圖3-1所示。</p><p><b> 圖3-1 登錄窗口</b></p>
28、<p> 加密解密窗口的設(shè)計(jì):與登錄窗口設(shè)計(jì)類似,也是首先建立一個(gè)窗體,然后添加一個(gè)面板來承載所添加的組件。本次設(shè)計(jì)的窗口只許添加“加密”、“解密”兩個(gè)按鈕即可,如圖3-2所示。</p><p> 圖3-2 加密解密窗口</p><p> 3.1.2 實(shí)現(xiàn)所用關(guān)鍵代碼簡述</p><p> 實(shí)現(xiàn)登錄窗口設(shè)計(jì)所用代碼:</p>&l
29、t;p> private static JLabel l3 = new JLabel();</p><p> public static void main(String[] args){</p><p> final JFrame frame = new JFrame();</p><p> JPanel panel = new JPanel();&
30、lt;/p><p> frame.setTitle("主人,好開心又見到你了");</p><p> frame.setBounds(500, 250, 300, 200);</p><p> final JTextField text = new JTextField(20);</p><p> final JPas
31、swordField pass = new JPasswordField(20);</p><p> JButton button = new JButton("叮咚");</p><p> final JLabel resultLabel = new JLabel();</p><p> JLabel l1 = new JLabel(&q
32、uot;尊姓大名:");</p><p> JLabel l2 = new JLabel("暗 號(hào):");</p><p> panel.add(l1);</p><p> panel.add(text);</p><p> panel.add(l2);</p><p&g
33、t; panel.add(pass);</p><p> panel.add(button);</p><p> panel.add(resultLabel);</p><p> panel.add(l3);</p><p> 實(shí)現(xiàn)文件加密解密窗口設(shè)計(jì)所用代碼:</p><p> JFrame f1 = n
34、ew JFrame("加密解密");</p><p> f1.setBounds(550, 250, 250, 150);</p><p> JPanel p1 = new JPanel(new FlowLayout());</p><p> JButton b1 = new JButton("加密");</p&
35、gt;<p> JButton b2 = new JButton("解密");</p><p> p1.add(b1);</p><p> p1.add(b2);</p><p> f1.add(p1);</p><p> 其中用“frame.setTitle("")”語句來給窗
36、口命名。用“frame.setBounds(5)”語句來調(diào)整窗體的大小,以便達(dá)到更好的視覺效果,需注意的是,用此語句來設(shè)計(jì)窗口大小時(shí)坐標(biāo)原點(diǎn)在整個(gè)屏幕的左上角。</p><p> 3.2 登錄操作模塊</p><p> 登錄操作主要實(shí)現(xiàn)用戶的登錄,因?yàn)榭梢詫?duì)文件進(jìn)行加密的只能某些指定用戶,所以在登錄模塊中建立了用戶庫,并相應(yīng)的建立一個(gè)與用戶庫相對(duì)應(yīng)的登錄密碼庫。若為非指定用戶登錄時(shí),
37、系統(tǒng)報(bào)錯(cuò)。</p><p> 3.2.1 登錄設(shè)計(jì)過程</p><p> 首先指定一個(gè)或幾個(gè)用戶,并為他們?cè)O(shè)置對(duì)應(yīng)的密碼。本次設(shè)計(jì)中是用數(shù)組來實(shí)現(xiàn)用戶庫與密碼庫的建立的。并且通過事件監(jiān)聽器把登錄設(shè)置與窗口上的按鈕綁定到一起,即可實(shí)現(xiàn)用戶登錄操作。當(dāng)用戶名與密碼相匹配時(shí)正常登錄,如圖3-3所示。</p><p> 圖3-3 正常登錄界面</p>&
38、lt;p> 當(dāng)用戶名或登錄密碼不在編程時(shí)所建立的用戶名庫和密碼庫,或者登錄用戶名與密碼不相符,系統(tǒng)進(jìn)行錯(cuò)誤提示,如圖3-4所示。</p><p> 圖3-4 非正常登錄界面</p><p> 3.2.2 實(shí)現(xiàn)所用關(guān)鍵代碼簡述</p><p> 以下是實(shí)現(xiàn)建立用戶庫密碼庫所用的程序:</p><p> String[] name
39、Box = {"張洋","楊婷","呂航","程云飛","鐵秉祥","杜康"};</p><p> String[] passBox = {"000","111","333","444","555&quo
40、t;,"666"};</p><p> String[] ImageIcon1={"jfh","fjh"};</p><p> String result = "出錯(cuò)啦!";</p><p> 注意,建立的密碼庫是用戶庫的索引,所以二者的元素一一對(duì)應(yīng),在設(shè)置密碼時(shí)應(yīng)特別注意這一點(diǎn)。
41、</p><p> 以下是實(shí)現(xiàn)部分按鈕事件監(jiān)聽器的程序:</p><p> ActionListener l = new ActionListener(){</p><p> public void actionPerformed(ActionEvent e){</p><p> String name = text.getText(
42、);</p><p> String password = pass.getText();</p><p> Login cpp = new Login();</p><p> String value = cpp.login(name, password);</p><p> if(value.equals("叮咚&quo
43、t;)){</p><p> frame.setVisible(false);</p><p> JFrame f1 = new JFrame("加密解密");</p><p> f1.setBounds(550, 250, 250, 150);</p><p> JPanel p1 = new JPanel(n
44、ew FlowLayout());</p><p> JButton b1 = new JButton("加密");</p><p> JButton b2 = new JButton("解密");</p><p> p1.add(b1);</p><p> p1.add(b2);</p&
45、gt;<p> f1.add(p1);</p><p> f1.setVisible(true);</p><p> 在本次程序設(shè)計(jì)中,通常不會(huì)知道用戶的動(dòng)作什么時(shí)候會(huì)發(fā)生,如用戶可能點(diǎn)擊某一個(gè)按鈕,也可能不點(diǎn)擊,而且點(diǎn)擊按鈕的時(shí)機(jī)在運(yùn)行時(shí)才可能知道。如果用傳統(tǒng)的程序控制方式,則很難做到準(zhǔn)確的響應(yīng)。通常這種情況或者類似的情況下,我們可以使用事件/監(jiān)聽器模式。將一個(gè)監(jiān)聽器
46、(listener)與特定的控件(如按鈕等)綁定起來,當(dāng)發(fā)生用戶點(diǎn)擊等事件(Event)時(shí),調(diào)用監(jiān)聽器的處理方法,從而響應(yīng)用戶的動(dòng)作。</p><p> 3.3 加密操作模塊</p><p> 加密模塊用于對(duì)指定的文件進(jìn)行加密,是整個(gè)設(shè)計(jì)兩個(gè)核心模塊之一。本次設(shè)計(jì)的加密模塊是通過改變文件的讀取方式來使加密后的文件無法打開,并且改變?cè)募臄U(kuò)展名,使除了指定用戶外的其他用戶無法找到相應(yīng)
47、的破解軟件來打開加密文件。</p><p> 3.3.1 加密設(shè)計(jì)過程</p><p> 首先確定加密時(shí)所用的算法,并按算法編寫加密段程序,然后再編寫讀取要加密文件的程序,最后編程為加密后的文件指定一個(gè)新的存儲(chǔ)路徑。將上述三段程序用Java語言連在一起,并且為了使操作更加完善加入加密后將原文件刪除的指令,選擇加密文件的窗口如圖3-4所示。</p><p> 圖
48、3-4 選擇加密文件</p><p> 加密后的文件被保存到指定的存儲(chǔ)硬盤里,并且擴(kuò)展名改變,如圖3-5所示。打開后內(nèi)容亂碼,如圖3-6所示。</p><p> 圖3-5 文件被保存到E盤里并且擴(kuò)展</p><p> 圖3-6 加密后內(nèi)容亂碼</p><p> 3.3.2 實(shí)現(xiàn)所用關(guān)鍵代碼簡述</p><p>
49、 以下是用來改變被加密文件擴(kuò)展名時(shí)所用的程序:</p><p> String s1 = file.toString();</p><p> String s = file.getName();</p><p> String name = s.substring(0,s.lastIndexOf("."));</p><
50、;p> File srcFile = new File(s1);</p><p> File dstFile = new File("e://"+name+".aaa");</p><p> FileInputStream cfis = new FileInputStream(srcFile);</p><p>
51、 FileOutputStream cfos = new FileOutputStream(dstFile);</p><p> byte[] info = new byte[4];</p><p> String prefix = s.substring(s.lastIndexOf(".")+1);//pdf</p><p> byte[
52、] fixbox = prefix.getBytes();</p><p> 此程序可以用來獲取被加密文件的存儲(chǔ)路徑,并且將原文件的后綴保存起來,用自己設(shè)定的后綴來代替,達(dá)到改變擴(kuò)展名的效果。</p><p> 以下是用來實(shí)現(xiàn)加密后文件打開后內(nèi)容亂碼的程序:</p><p> System.arraycopy(fixbox, 0, info, 0, fixbo
53、x.length);</p><p> cfos.write(info);</p><p> byte[] b1 = new byte[1024];</p><p> int i1 = cfis.read(b1);</p><p> while(i1 != -1){</p><p> byte cb = b1
54、[0];</p><p> b1[0] = b1[1];</p><p> b1[1] = cb;</p><p> cfos.write(b1,0,i1);</p><p> i1 = cfis.read(b1);</p><p> 此程序通過將字符互換實(shí)現(xiàn)文件打開后內(nèi)容亂碼,此程序就是本次設(shè)計(jì)所用的算法,
55、根據(jù)它實(shí)現(xiàn)的原理可以成此法為“ab互換法”,這種加密算法最大的優(yōu)點(diǎn)是實(shí)現(xiàn)較容易,適合對(duì)容量較大的文件進(jìn)行加密。</p><p> 3.4 解密操作模塊</p><p> 解密模塊是根據(jù)加密模塊而設(shè)計(jì)的,實(shí)現(xiàn)對(duì)文件的解密操作,是本次設(shè)計(jì)的又一核心模塊。本次設(shè)計(jì)的解密操作是加密操作的反操作,即它是將加密后的文件的讀取方式換回原來的讀取方式,并且將原文件的擴(kuò)展名還原,以便使指定的用戶對(duì)文件
56、進(jìn)行正常讀取,讀取被加密文件的窗口如圖3-7所示。</p><p> 圖3-7 讀取被加密文件</p><p> 被加密文件經(jīng)解密后,擴(kuò)展名還原,如圖3-8所示。能正常讀取,如圖3-9所示。</p><p> 圖3-8 解密后擴(kuò)展名還原</p><p> 圖3-9 解密后文件正常讀取</p><p> 3.4
57、.1 解密設(shè)計(jì)過程</p><p> 首先根據(jù)加密時(shí)所用的算法,編寫與該算法計(jì)算過程相反的解密程序,然后再編寫讀取被加密文件的程序,并編寫程序?yàn)榻獯a文件指定一個(gè)存儲(chǔ)路徑。最后將上述三段程序用JAVA語言連在一起,并且為了使操作更加完善加入解密后加密文件刪除的指令。這樣就可以實(shí)現(xiàn)原文件的還原了。</p><p> 3.4.2 實(shí)現(xiàn)所用關(guān)鍵代碼簡述</p><p>
58、 以下是實(shí)現(xiàn)還原擴(kuò)展名的程序:</p><p> String name = file.getName();</p><p> String lastName = name.substring(0,name.lastIndexOf("."));</p><p> File mbFile = new File("e://"
59、;+name);</p><p> FileInputStream dfis = new FileInputStream(file);</p><p> byte[] info = new byte[4];</p><p> dfis.read(info);</p><p> StringBuffer sb = new StringB
60、uffer();</p><p> for (byte value : info){</p><p> if (value == 0){</p><p><b> break;}</b></p><p> sb.append((char)value);}</p><p> File ds
61、tFile = new File("e://"+lastName+"."+sb.toString());</p><p> 我們可以看出次段程序的過程恰跟加密過程相反,即先讀取的是加密后文件的擴(kuò)展名,在用原文件的擴(kuò)展名將其替換。</p><p> 以下是實(shí)現(xiàn)將原文件內(nèi)容還原的程序段:</p><p> FileOutpu
62、tStream dfos = new FileOutputStream(dstFile);</p><p> byte[] b1 = new byte[1024];</p><p> int i1 = dfis.read(b1);</p><p> while(i1 != -1){</p><p> byte cb = b1[0];&
63、lt;/p><p> b1[0] = b1[1];</p><p> b1[1] = cb;</p><p> dfos.write(b1,0,i1);</p><p> i1 = dfis.read(b1);</p><p> 解密過程再次采用“ab互換法”將加密時(shí)互換的兩個(gè)因素?fù)Q回原來的位置,這樣就實(shí)現(xiàn)了文件
64、的還原。</p><p><b> 第4章 運(yùn)行調(diào)試</b></p><p><b> 4.1 加密模塊</b></p><p> 本程序采用簡單的加密算法,即把從文本區(qū)獲得的文本文件,初始化,存放到一個(gè)數(shù)組中,然后進(jìn)行“ab互換”運(yùn)算,把結(jié)果重新存放于該數(shù)組中,從而顯現(xiàn)在“文件瀏覽窗口”中。代碼實(shí)現(xiàn):</
65、p><p> public class Jia {</p><p> public static void main(String[] args) {</p><p> public void JiaMi(File file){</p><p> try {FileInputStream fis = new FileInputStream
66、(new File("e://d.txt"));</p><p> byte[] b = new byte[1024];int i = fis.read(b);String s =null;</p><p> if(i>0){s = new String(b,0,i);}</p><p> String s1 = file.toStr
67、ing();</p><p> String s = file.getName();</p><p> System.out.println(s);</p><p> String name = s.substring(0,s.lastIndexOf("."));</p><p> System.out.print
68、ln(name);File srcFile = new File(s1);</p><p> File dstFile = new File("e://"+name+".aaa");</p><p> FileInputStream cfis = new FileInputStream(srcFile);</p><p>
69、 FileOutputStream cfos = new FileOutputStream(dstFile);</p><p> byte[] info = new byte[4];</p><p> String prefix = s.substring(s.lastIndexOf(".")+1);//pdf</p><p> byte
70、[] fixbox = prefix.getBytes();//數(shù)組復(fù)制</p><p> System.arraycopy(fixbox, 0, info, 0, fixbox.length);</p><p> cfos.write(info);byte[] b1 = new byte[1024];int i1 = cfis.read(b1);</p><p&g
71、t; while(i1 != -1){byte cb = b1[0];b1[0] = b1[1];b1[1] = cb;</p><p> cfos.write(b1,0,i1);i1 = cfis.read(b1);}</p><p> cfos.flush();cfos.close();cfis.close();srcFile.delete();} </p><
72、;p> catch (IOException e) {e.printStackTrace();}}</p><p><b> 4.2 解密模塊</b></p><p> 解密操作其實(shí)同加密操作相同,依舊首先打開加密后的文件,使其顯示在文本區(qū)中,再同樣對(duì)數(shù)組里的元素進(jìn)行初始化,進(jìn)行“ab互換”運(yùn)算,即可得到解密后的文件,再顯示到“文件瀏覽窗口”中。代碼實(shí)現(xiàn)
73、:</p><p> public class Jie {</p><p> public void Jiemi(File file){</p><p> try {String name = file.getName();</p><p> String lastName = name.substring(0,name.lastIn
74、dexOf("."));</p><p> File mbFile = new File("e://"+name);</p><p> FileInputStream dfis = new FileInputStream(file);</p><p> byte[] info = new byte[4];</p&g
75、t;<p> dfis.read(info);</p><p> StringBuffer sb = new StringBuffer();</p><p> for (byte value : info){if (value == 0){break;}</p><p> sb.append((char)value);}</p>
76、<p> File dstFile = new File("e://"+lastName+"."+sb.toString());</p><p> File dstFile = new File("e://"+System.currentTimeMillis()+".gif");</p><p>
77、 FileOutputStream dfos = new FileOutputStream(dstFile);</p><p> byte[] b1 = new byte[1024];</p><p> int i1 = dfis.read(b1);</p><p> while(i1 != -1){byte cb = b1[0];b1[0] = b1[1]
78、;b1[1] = cb;</p><p> dfos.write(b1,0,i1);</p><p> i1 = dfis.read(b1);}</p><p> dfos.flush();dfos.close();dfis.close();file.delete();mbFile.delete();} </p><p> catch
79、 (IOException e) {e.printStackTrace();}</p><p><b> 結(jié)論</b></p><p> 在設(shè)計(jì)過程中,我們必須持著嚴(yán)謹(jǐn)認(rèn)真的態(tài)度和作風(fēng)。每一個(gè)細(xì)節(jié)都需要高度重視,如果不認(rèn)真思考決策,就會(huì)出現(xiàn)或大或小的錯(cuò)誤。若早期的錯(cuò)誤隱藏下來沒被發(fā)現(xiàn),就會(huì)對(duì)后面的工作產(chǎn)生很大的影響,甚至需要從頭開始。</p><
80、;p> 在設(shè)計(jì)過程中,我們不斷發(fā)現(xiàn)錯(cuò)誤,不斷改正錯(cuò)誤,不斷領(lǐng)悟,不斷獲取從中,我懂得了在今后社會(huì)的發(fā)展和學(xué)習(xí)實(shí)踐過程中,一定要不懈努力,不能遇到題就想到要退縮,一定要不厭其煩的發(fā)現(xiàn)問題所在,然后一一進(jìn)行解決,只有這樣,才獲得最終的勝利。不然,將永遠(yuǎn)不能獲得成功,也不能得到社會(huì)及他人對(duì)自己的認(rèn)可!課程設(shè)計(jì)誠然是一門專業(yè)課,讓我的專業(yè)知識(shí)以及專業(yè)技能上得到提升,同時(shí)又是一門道課,一門辯思課,給了我許多道、很多思,給了我莫大的空間。我
81、認(rèn)為,在此次實(shí)踐中不僅培養(yǎng)了獨(dú)立思考、動(dòng)手操作的能力,在各種其它能力上也都有了提高。更重要的是我們學(xué)會(huì)了很多學(xué)習(xí)的方法。而這正是以后最實(shí)用的知識(shí)。要面對(duì)社會(huì)的挑戰(zhàn),只有不斷的學(xué)習(xí)、實(shí)踐,再學(xué)習(xí)、再實(shí)踐。我想,以后不管有多苦,我們都要會(huì)變苦為樂,從中尋找樂趣。</p><p> 通過此次的課程設(shè)計(jì),我明白了思路即出路,有什么不懂不明白的地方要及時(shí)請(qǐng)教或上網(wǎng)查詢,只要肯花時(shí)間去認(rèn)真鉆研,動(dòng)腦思考,動(dòng)手實(shí)踐,就沒有弄
82、不懂的知識(shí)。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 川劉劫. Java 反編譯技術(shù)和代碼安全[J] 現(xiàn)代電子技術(shù),2004,27(10): 22-24.</p><p> [2] 冀振燕. Java 編譯程序技術(shù)與Java 性能[J]. 軟件學(xué)報(bào),2000, 11 (2):173-175.</p>
83、;<p> [3] Wu Yang. Advanced Obfuscation Techniques for Java Bytecod[J] Joumal of Systems and Software Volume, 2004, 71 (1): 1-3</p><p> [4] Berghei H. Wartermarking Cyberspace[J]. Communications
84、of the ACM, 1997, 40(11): 19-21</p><p><b> 附錄</b></p><p> 本課程設(shè)計(jì)所用的Java語言編寫的程序:</p><p> TestJUI.java:</p><p> package GUI;</p><p> import j
85、ava.awt.FlowLayout; / /導(dǎo)入的包</p><p> import java.awt.event.ActionEvent;</p><p> import java.awt.event.ActionListener;</p><p> import java.io.File;</p><p> import jav
86、ax.swing.JButton;</p><p> import javax.swing.JFileChooser;</p><p> import javax.swing.JFrame;</p><p> import javax.swing.JLabel;</p><p> import javax.swing.JPanel;&
87、lt;/p><p> import javax.swing.JPasswordField;</p><p> import javax.swing.JTextField;</p><p> public class TestGUI {</p><p> private static JLabel l3 = new JLabel();<
88、;/p><p> public static void main(String[] args){</p><p> final JFrame frame = new JFrame();</p><p><b> //添加面板</b></p><p> JPanel panel = new JPanel();</
89、p><p><b> //設(shè)置窗體大小</b></p><p> frame.setTitle("主人,好開心又見到你了");</p><p> frame.setBounds(500, 250, 300, 200);</p><p><b> //添加文本框</b><
90、/p><p> final JTextField text = new JTextField(20);</p><p><b> //添加密碼框</b></p><p> final JPasswordField pass = new JPasswordField(20);</p><p> //final JIma
91、geIconField image=new JImageIconField(20);</p><p><b> //添加按鈕</b></p><p> JButton button = new JButton("叮咚");</p><p> //添加標(biāo)簽(顯示最終登錄結(jié)果)</p><p>
92、final JLabel resultLabel = new JLabel();</p><p> JLabel l1 = new JLabel("尊姓大名:");</p><p> JLabel l2 = new JLabel("暗 號(hào):");</p><p><b> //添加組件</b
93、></p><p> panel.add(l1);</p><p> panel.add(text);</p><p> panel.add(l2);</p><p> panel.add(pass);</p><p> panel.add(button);</p><p>
94、panel.add(resultLabel);</p><p> panel.add(l3);</p><p><b> //綁定事件監(jiān)聽器</b></p><p> ActionListener l = new ActionListener(){</p><p> public void actionPerfo
95、rmed(ActionEvent e){</p><p><b> //調(diào)用登錄方法</b></p><p> String name = text.getText();</p><p> String password = pass.getText();</p><p> Login cpp = new Log
96、in();</p><p> String value = cpp.login(name, password);</p><p> if(value.equals("叮咚")){</p><p> frame.setVisible(false);</p><p> JFrame f1 = new JFrame(&
97、quot;加密解密");</p><p> f1.setBounds(550, 250, 250, 150);</p><p> JPanel p1 = new JPanel(new FlowLayout());</p><p> JButton b1 = new JButton("加密");</p><p&g
98、t; JButton b2 = new JButton("解密");</p><p> p1.add(b1);</p><p> p1.add(b2);</p><p> f1.add(p1);</p><p> f1.setVisible(true);</p><p> //設(shè)置關(guān)閉時(shí)
99、退出3</p><p> f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p> b1.addActionListener(new ActionListener() {</p><p><b> @Override</b></p><p> publ
100、ic void actionPerformed(ActionEvent e) {</p><p> JFileChooser chooser = new JFileChooser();</p><p> int returnVal = chooser.showOpenDialog(frame);</p><p> if(returnVal == JFileCh
101、ooser.APPROVE_OPTION) {</p><p> File file = chooser.getSelectedFile();</p><p><b> //加密</b></p><p> Jia test = new Jia();</p><p> test.JiaMi(file);} }});
102、</p><p> b2.addActionListener(new ActionListener() {</p><p><b> @Override</b></p><p> public void actionPerformed(ActionEvent e) {</p><p> JFileChooser
103、chooser = new JFileChooser();</p><p> int returnVal = chooser.showOpenDialog(frame);</p><p> if(returnVal == JFileChooser.APPROVE_OPTION) {</p><p> File file = chooser.getSelecte
104、dFile();</p><p><b> //加密</b></p><p> Jie test1 = new Jie();</p><p> test1.Jiemi(file);}}});}else {</p><p> String back = "出錯(cuò)啦!";</p>&l
105、t;p> l3.setText(back);}}};</p><p> button.addActionListener(l);</p><p> frame.add(panel);</p><p><b> //設(shè)置顯示</b></p><p> frame.setVisible(true);</
106、p><p> //設(shè)置關(guān)閉時(shí)退出3</p><p> frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}</p><p> Login.java:</p><p> package GUI;</p><p> import java.io.File; /
107、/導(dǎo)入的包</p><p> import java.io.FileInputStream;</p><p> import java.io.FileOutputStream;</p><p> public class Login {</p><p> //登錄方法 用戶名和密碼 數(shù)組 索引對(duì)應(yīng)</p><p&
108、gt; public String login(String name,String password){</p><p> String[] nameBox = {"張洋","楊婷","呂航","程云飛","鐵秉祥","杜康"};</p><p> String[
109、] passBox = {"000","111","333","444","555","666"};</p><p> String[] ImageIcon1={"jfh","fjh"};</p><p> String res
110、ult = "出錯(cuò)啦!";</p><p> for(int i=0;i<nameBox.length;i++){</p><p> if(name.equals(nameBox[i])){</p><p> if(password.equals(passBox[i])){result = "叮咚";}break;
111、}}</p><p> return result;}}</p><p><b> Jia.java:</b></p><p> package GUI;//加密</p><p> import java.io.File;</p><p> import java.io.FileInpu
112、tStream;</p><p> import java.io.FileOutputStream;</p><p> import java.io.IOException;</p><p> public class Jia {</p><p> public void JiaMi(File file){</p>&l
113、t;p><b> try {</b></p><p> String s1 = file.toString();</p><p> String s = file.getName();</p><p> String name = s.substring(0,s.lastIndexOf("."));</p
114、><p> File srcFile = new File(s1);//被加密文件</p><p> File dstFile = new File("e://"+name+".aaa");//加密后的文件</p><p> FileInputStream cfis = new FileInputStream(srcFile
115、);</p><p> FileOutputStream cfos = new FileOutputStream(dstFile);</p><p> //把文件后綴加入被加密文件</p><p> byte[] info = new byte[4];</p><p><b> //獲取文件后綴</b></
116、p><p> String prefix = s.substring(s.lastIndexOf(".")+1);//pdf</p><p> byte[] fixbox = prefix.getBytes();</p><p><b> //數(shù)組復(fù)制</b></p><p> System.ar
117、raycopy(fixbox, 0, info, 0, fixbox.length);</p><p> cfos.write(info);</p><p> byte[] b1 = new byte[1024];</p><p> int i1 = cfis.read(b1);</p><p> while(i1 != -1){&l
118、t;/p><p> byte cb = b1[0];</p><p> b1[0] = b1[1];</p><p> b1[1] = cb;</p><p> cfos.write(b1,0,i1);</p><p> i1 = cfis.read(b1);}</p><p> cfo
119、s.flush();cfos.close();cfis.close();srcFile.delete();</p><p> } catch (IOException e) {e.printStackTrace();}}}</p><p><b> Jie.java:</b></p><p> package GUI;//解密</p
120、><p> import java.io.File;</p><p> import java.io.FileInputStream;</p><p> import java.io.FileOutputStream;</p><p> import java.io.IOException;</p><p> p
121、ublic class Jie {</p><p> public void Jiemi(File file){</p><p><b> try {</b></p><p> String name = file.getName();</p><p> String lastName = name.substr
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java文件加密解密課程設(shè)計(jì)
- java課程設(shè)計(jì) -- 文件加密與解密
- 文件加密解密算法研究與實(shí)現(xiàn)——基于usbkey的文件加密解密方案
- 文件加密與解密—java課程設(shè)計(jì)報(bào)告
- 加密解密文件
- 文件加密解密算法研究與實(shí)現(xiàn)——基于USBKEY的文件加密解密方案.pdf
- java課程設(shè)計(jì)---加密和解密
- java課程設(shè)計(jì)--加密與解密
- vc實(shí)現(xiàn)文件簡單的加密和解密
- 文件的加密解密技術(shù)研究.pdf
- c語言課程設(shè)計(jì)-文件加密解密
- c語言課程設(shè)計(jì)-文件加密解密
- 基于tcp網(wǎng)絡(luò)加密解密
- 加密解密
- java課程設(shè)計(jì)文本文檔的加密與解密
- 畢業(yè)設(shè)計(jì)-----文件加密與解密算法研究設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)-----文件加密與解密算法研究設(shè)計(jì)
- 基于xor算法的數(shù)據(jù)加密解密編程
- 面向JAVA代碼的加密及動(dòng)態(tài)解密機(jī)制的研究與實(shí)現(xiàn).pdf
- c語言課程設(shè)計(jì)-文件加密解密(含源代碼)
評(píng)論
0/150
提交評(píng)論