版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 11精算2012-2013(二)</p><p> 《Java程序設計》課程設計</p><p> 設計題目 加密與解密 </p><p> 設計時間 2013.6.23 至 2013.6.29 </p><p> 學生姓名
2、 </p><p> 學生學號 </p><p> 所在班級 </p><p> 指導教師 </p><p><b> 摘要</b></p><p> 隨著網(wǎng)絡
3、技術的不斷發(fā)展,人們的個人信息、網(wǎng)絡間的文件傳遞、電子商務等方面都需要大力的保護,文件加密技術也就隨之產(chǎn)生。文件的加密主要是由加密算法實現(xiàn),加密算法有多種,本程序設計對文件的加密使用的是最基礎的異或加密算法。</p><p> Java語言具有簡單、安全、可移植、面向?qū)ο?、健壯、多線程、體系結構中立、解釋執(zhí)行、高性能、分布式和動態(tài)等主要特點。本程序充分利用Java語言的特點,針對當下社會比較重視的文件加密,設計
4、了本程序。</p><p> 使用本程序可以對txt,word等多種文件進行加密解密,使用便捷實用,功能完善,</p><p> 滿足了用戶對文件安全性的需求。</p><p> 關鍵詞 JAVA;加密;解密</p><p><b> 目 錄</b></p><p><b
5、> 1 需求分析4</b></p><p> 2 設計方法及設計方案5</p><p><b> 3 系統(tǒng)設計6</b></p><p> 3.1 程序流程圖6</p><p> 3.2 圖形用戶界面模塊7</p><p> 3.3 加密操作模塊7<
6、/p><p> 3.4解密操作模塊8</p><p> 3.5文件保存模塊8</p><p> 3.6文件選擇模塊9</p><p> 4 系統(tǒng)的開發(fā)和運行環(huán)境11</p><p><b> 5 系統(tǒng)實現(xiàn)12</b></p><p><b> 5
7、.1加密12</b></p><p><b> 5.2 解密14</b></p><p> 5.3分析討論15</p><p> 6 總結與心得體會16</p><p><b> 參考文獻17</b></p><p><b> 附錄
8、18</b></p><p><b> 1 需求分析</b></p><p><b> 基本要求:</b></p><p> 1. 采用圖形用戶界面。</p><p> 2. 給定任意一個文本文件,進行加密,生成另一個文件。</p><p> 3.對加密
9、后的文件還原。</p><p><b> 分析如下:</b></p><p> 1.向圖形用戶界面中添加組件。</p><p> 2.設置各個組件的布局。</p><p> 3. 添加窗口事件。</p><p> 4. 查找讀入及寫入文件,并顯示。</p><p>
10、; 5. 加密功能實現(xiàn)。</p><p> 6. 解密功能實現(xiàn)。</p><p> 2 設計方法及設計方案</p><p> 本程序采用傳統(tǒng)的異或加密算法,本程序采用的算法是一個對稱算法,即加密和解密用的是同一個算法。首先經(jīng)“打開”菜單項,進入文件選擇模塊,讀取字符流,輸出文本文檔后,在一個數(shù)組中,對字符進行異或運算,從而達到加密的效果。</p>
11、;<p> 本程序采用異或算法,降低程序的復雜度,使其更清晰,但功能依舊很強大。</p><p><b> 3 系統(tǒng)設計</b></p><p><b> 3.1 程序流程圖</b></p><p> 該程序的模塊調(diào)用十分簡單明了,所以主程序的運行也很清晰,以下就是主程序的詳細流程圖,如圖4-1所示&
12、lt;/p><p><b> 圖4-1流程圖</b></p><p> 3.2 圖形用戶界面模塊</p><p> 在圖形用戶界面,設置兩個面板,并分別設置顯示其組件的布局。設置兩個菜單項,分別為“打開”和“保存”;設置兩個按鈕,分別為“加密”和“解密”;創(chuàng)建一個文本區(qū),用一個標簽注明“文件瀏覽窗口”,這就是整個圖形用戶界面。</p&g
13、t;<p> 此外,還添加了一個窗口事件windowClosing,可以關閉運行的程序。</p><p> 窗口事件的代碼實現(xiàn):</p><p> addWindowListener(new WindowAdapter()</p><p><b> {</b></p><p> public vo
14、id windowClosing(WindowEvent e)</p><p><b> {</b></p><p> System.exit(0);</p><p><b> }</b></p><p><b> });</b></p><p&
15、gt;<b> }</b></p><p> 3.3 加密操作模塊</p><p> 本程序采用簡單的加密算法,即把從文本區(qū)獲得的文本文件,初始化,存放到一個數(shù)組中,然后進行異或運算,把結果重新存放于該數(shù)組中,從而顯現(xiàn)在“文件瀏覽窗口”中。</p><p><b> 代碼實現(xiàn):</b></p><
16、;p> if(e.getSource()==button1)</p><p><b> {</b></p><p> char a[]=texta.getText().toCharArray();/*把texta中獲得的文本,進行初始化,與原字符串長度相等,并將該字符串對象的全部字符復制到該數(shù)組a[]中*/</p><p> te
17、xta.setText(null);</p><p><b> int n;</b></p><p> char secret=' ';</p><p> for(int i=0;i<a.length;i++)</p><p><b> {</b></p>
18、<p> char c=(char)(secret^a[i] ;//進行異或運算) </p><p> texta.append(""+c);</p><p><b> }</b></p><p><b> }</b></p><p><b> 3
19、.4解密操作模塊</b></p><p> 解密操作其實同加密操作相同,依舊首先打開加密后的文件,使其顯示在文本區(qū)中,再同樣對數(shù)組里的元素進行初始化,進行異或運算,即可得到解密后的文件,再顯示到“文件瀏覽窗口”中。</p><p> 入口參數(shù):指定文件路徑</p><p><b> 代碼實現(xiàn):</b></p>&
20、lt;p> if(e.getSource()==button2)</p><p><b> {</b></p><p> char a[]=texta.getText().toCharArray();</p><p> texta.setText(null);</p><p><b> int
21、n;</b></p><p> char secret=' ';</p><p> for(int i=0;i<a.length;i++)</p><p><b> {</b></p><p> char c=(char)(secret^a[i]);//再次異或運算,即還原<
22、;/p><p> texta.append(""+c);</p><p><b> }</b></p><p><b> }</b></p><p><b> 3.5文件保存模塊</b></p><p> 本程序最大的特點就是:
23、可以選擇是否保存加密后的文本文件。因為加密后的文件先顯示在文本區(qū)中,之后選擇菜單項“保存”,即可彈出“保存對話框”,進行查找寫入文件,寫入字符流,從而實現(xiàn)保存。</p><p><b> 代碼實現(xiàn):</b></p><p> if(e.getSource()==itemSave)//查找寫入的文件</p><p><b> {&
24、lt;/b></p><p> filedialog_save.setVisible(true);</p><p> if(filedialog_save.getFile()!=null)</p><p><b> {</b></p><p><b> try</b></p>
25、;<p><b> {</b></p><p> File file=new File(filedialog_save.getDirectory(),filedialog_save.getFile());</p><p> FileWriter tofile=new FileWriter(file);//寫入字符流</p><p
26、> BufferedWriter out=new BufferedWriter(tofile);</p><p> out.write(texta.getText(),0,(texta.getText()).length());</p><p> out.close();</p><p> tofile.close();</p><
27、p><b> }</b></p><p> catch (IOException e2)</p><p><b> {</b></p><p><b> }</b></p><p><b> }</b></p><p&g
28、t;<b> }</b></p><p><b> 3.6文件選擇模塊</b></p><p> 同上個文件保存模塊類似,依舊在選擇菜單項“打開”后,查找讀入文件,讀取字符流,彈出“打開對話框”,從而可實現(xiàn)獲取文件。</p><p> 出口值:被選文件的路徑</p><p><b>
29、; 代碼實現(xiàn):</b></p><p> public void actionPerformed(ActionEvent e)//查找讀入文件</p><p><b> {</b></p><p> if(e.getSource()==itemOpen)</p><p><b> {<
30、;/b></p><p> filedialog_load.setVisible(true);</p><p> texta.setText(null);</p><p><b> String s;</b></p><p> if(filedialog_load.getFile()!=null)</
31、p><p><b> {</b></p><p><b> try</b></p><p><b> {</b></p><p> File file=new File(filedialog_load.getDirectory(),filedialog_load.getFi
32、le());</p><p> FileReader file_reader=new FileReader(file);//讀取字符流</p><p> BufferedReader in=new BufferedReader(file_reader);</p><p> while((s=in.readLine())!=null)</p>&l
33、t;p> texta.append(s+'\n');</p><p> in.close();</p><p> file_reader.close();</p><p><b> }</b></p><p> catch (IOException e1)</p><p
34、><b> {</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> 4 系統(tǒng)的開發(fā)和運行環(huán)境</p><p> 開發(fā)軟件: E
35、clipse 6.5,JDK 1.7.0</p><p> 運行環(huán)境: Windows 7 (windows xp 亦可)</p><p><b> 5 系統(tǒng)實現(xiàn)</b></p><p><b> 5.1加密</b></p><p> 首先在我機器C盤文件夾名為1的文件夾離創(chuàng)建一個名為Exa
36、mple.txt文本文件用做測試。</p><p> 運行程序,彈出如圖5-1的對話框。</p><p><b> 圖5-1運行程序</b></p><p> 點擊“文件”,選擇“打開”,即彈出“打開”對話框,選擇一個文本文件,如圖5-2。</p><p> 圖 5-2選擇加密文件</p><
37、p> 選擇文件后,即可在“文件瀏覽窗口”中顯示文本的信息,點擊“加密”按鈕,即可在“文件瀏覽窗口”看到加密后的文件(如圖5-3)。</p><p> 圖 5-3 生成加密文件</p><p> 對加密后的密文進行保存,選擇“文件”下的“保存”,即可彈出“保存”對話框,選擇路徑,即可保存,如圖5-4和5-5所示。</p><p> 圖 5-4 保存加密文
38、</p><p> 圖 5-5 瀏覽加密文件</p><p><b> 5.2 解密</b></p><p> 解密操作中對文件選擇,密碼輸入和加密操作是一樣的。</p><p> 將剛剛加密的程序進行解密,打開密文文件,選擇“加密與解密”窗口下“解密”按鈕,點擊,即可解密,如圖5-6所示。</p>
39、<p><b> 圖5-6 解密</b></p><p><b> 5.3分析討論</b></p><p> 在程序設計之初,考慮的是如何實現(xiàn)DES算法,但發(fā)現(xiàn) DES算法對于本次小程序來說,的確過于繁瑣,但當我們發(fā)現(xiàn)采用簡化后的DES算法----異或算法也可實現(xiàn)本功能,所以以后大大減少了工作量,可以說用Java語言是程序?qū)崿F(xiàn)
40、的一個成功之處。Java語言具有簡單、安全、可移植、面向?qū)ο?、健壯、多線程、體系結構中立、解釋執(zhí)行、高性能、分布式和動態(tài)等主要特點。而且,我覺得隨著科技的不斷進步,Java語言的優(yōu)越性會不斷地被挖掘出來,因為Java語言也是有生命的,它是不斷被人們的需求演變的越來越強大,這些,我覺得不言而喻。但往后,我想只有在不斷的使用以后才能體會到,在發(fā)現(xiàn)Java擁有秘密密鑰工廠后更是感受到它的強大。Java的JDK幫助文檔對于使用Java編程是非常
41、有幫助的,在我們編程過程中,遇到的一些不清楚的地方,都是靠它才得以解決,同時對Java語言的了解也更方便、深入了。</p><p> 程序利用Java圖形界面設計了一個方便用戶操作的窗口,使得程序運行的時候更想是個封裝好的運用程序,不過我知道離這個還是有很大距離的,而程序所要提升空間非常大,現(xiàn)在界面所能實現(xiàn)的也就幾個操作而已。但我們一致認為:如果程序要再做的強大點,可以引入其他的加密算法共用戶選擇,還可以設計成
42、同時對多個文件進行加密,不過這只能放到我們課下對此進行更深一步的研究了。</p><p> 程序的每個模塊實現(xiàn)的功能還算完整,層次間的調(diào)用還是比較清晰的,各個功能也得到了基本的實現(xiàn)。</p><p> 算法的時空分析,其實就是指算法的空間復雜度(包括時間復雜度和空間復雜度),其作用: 時間復雜度是度量算法執(zhí)行的時間長短;而空間復雜度是度量算法所需存儲空間的大小。</p>
43、<p> 程序的時間復雜度理論上是算不出來的,必須經(jīng)過必須上機運行測試才能知道。但我們不可能也沒有必要對每個算法都上機測試。但我們可以知道本算法其實是DES算法的簡化,所以,肯定只需知道哪個算法花費的時間多,哪個算法花費的時間少就可以了,并且,一個算法花費的時間與算法中語句的執(zhí)行次數(shù)成正比例,DES對64位的明文分組進行操作,通過一個初始置換,將明文分組成左半部分Li和右半部分Ri,各32位長。然后進行16輪完全相同的運算,
44、本程序直接采用數(shù)組,對其中的字符循環(huán)異或,只需進行一輪,所以時間復雜度T(n)是比較小的??臻g復雜度O(n)也是一樣的,它是對程序占用內(nèi)存的分析,由公式T(n)=O(f(n))知,時間復雜度與空間復雜度均為O(n)。</p><p><b> 6 總結與心得體會</b></p><p> 這次課程設計的要求并不多,只要實現(xiàn)加密與解密功能,而且只需要采用一種加密算法
45、,但是為了本次課程設計,我們組也搜索了大量的資料,并根據(jù)在課堂上,書本上,老師講過的知識,結合自身主觀和客觀因素,制定了本次課程設計的目標,并齊心協(xié)力,完成了此次設計。</p><p> 通過本次的課程設計,我們還知道了許多自身存在的不足,例如僅掌握了一種加密算法,但在日益發(fā)達的社會商業(yè)等領域,加密解密需要做的還非常多,并且Java領域博大精深,我們現(xiàn)在只是學到了它的一點皮毛而已,所以還需多多努力。</p
46、><p> 但是通過這些我還是學到了很多東西,先不說其他的,我最起碼最基礎的加密算法,而且以后可以運用到自己想要保密的文件當中去。</p><p> 通過這次課程設計,我用JAVA語言實現(xiàn),我這是我對JAVA語言有了根深的了解鞏固了以前學到的知識,也學習到了新的知識,課程設計雖然暫告一個段落,但我們學習Java的步伐不會終止。</p><p><b>
47、參考文獻</b></p><p> [1] 丁振凡.《Java語言實用教程》北京郵電大學出版社.</p><p> [2] 耿祥義.《Java2實用教程》清華大學出版社.</p><p> [3] 趙付青.《Java面向?qū)ο蟪绦蛟O計》國防工業(yè)出版社.</p><p> [4] 耿祥義.《Java課程設計》清華大學出版社.&
48、lt;/p><p><b> 附錄</b></p><p><b> 源代碼</b></p><p> import java.awt.*;</p><p> import java.awt.event.*;</p><p> import java.io.*;<
49、/p><p> import javax.swing.*;</p><p> class Myframe extends Frame implements ActionListener {</p><p> FileDialog filedialog_save,filedialog_load;</p><p> Button button
50、1,button2;</p><p> Label label;</p><p> MenuBar bar;</p><p> Menu menu;</p><p> MenuItem itemOpen,itemSave;</p><p> TextArea texta;</p><p&g
51、t; Myframe(String s) //創(chuàng)建對話框</p><p><b> {</b></p><p><b> super(s);</b></p><p> texta= new TextArea(38,160);</p><p> button1= new Button(
52、"加密");</p><p> button2= new Button("解密");</p><p> menu=new Menu("文件");</p><p> itemOpen=new MenuItem("打開");</p><p> itemSave
53、=new MenuItem("保存");</p><p> label=new Label("文件瀏覽窗口");</p><p> itemOpen.addActionListener(this);</p><p> itemSave.addActionListener(this);</p><p&g
54、t; button1.addActionListener(this);</p><p> button2.addActionListener(this);</p><p> filedialog_save=new FileDialog(this,"保存文件對話框",FileDialog.SAVE);</p><p> filedialog
55、_load=new FileDialog(this,"打開文件對話框",FileDialog.LOAD);</p><p> filedialog_save.addWindowListener(new WindowAdapter()</p><p><b> {</b></p><p> public void win
56、dowClosing(WindowEvent e)</p><p><b> {</b></p><p> filedialog_save.setVisible(false);</p><p><b> }</b></p><p><b> });</b></p&
57、gt;<p> filedialog_load.addWindowListener(new WindowAdapter()</p><p><b> {</b></p><p> public void windowClosing(WindowEvent e)</p><p><b> {</b>&l
58、t;/p><p> filedialog_load.setVisible(false);</p><p><b> }</b></p><p><b> });</b></p><p> Box box1=Box.createHorizontalBox();//創(chuàng)建一個從左到右顯示其組件的 bo
59、x1;</p><p> Box box2=Box.createVerticalBox();//創(chuàng)建一個從上到下顯示其組件的 box2;</p><p> Box box3=Box.createVerticalBox();</p><p> Box boxbase=Box.createVerticalBox();</p><p> P
60、anel panel1=new Panel();</p><p> Panel panel2=new Panel();</p><p> setMenuBar(bar=new MenuBar());</p><p> bar.add(menu);</p><p> menu.add(itemOpen);</p><
61、p> menu.add(itemSave);</p><p> panel1.add(button1);</p><p> panel1.add(button2);</p><p> box1.add(panel1);</p><p> box2.add(label);</p><p> panel2
62、.add(texta);</p><p> box3.add(panel2);</p><p> boxbase.add(box1);</p><p> boxbase.add(box2);</p><p> boxbase.add(box3);</p><p> add(boxbase);</p>
63、;<p> setLayout(new FlowLayout());</p><p> setBounds(100,0,1200,750);</p><p> setVisible(true);</p><p> addWindowListener(new WindowAdapter()</p><p><b>
64、; {</b></p><p> public void windowClosing(WindowEvent e)</p><p><b> {</b></p><p> System.exit(0);</p><p><b> }</b></p><p&g
65、t;<b> });</b></p><p> }//“關閉”窗口事件;</p><p> public void actionPerformed(ActionEvent e)//查找讀入文件</p><p><b> {</b></p><p> if(e.getSource()==
66、itemOpen)</p><p><b> {</b></p><p> filedialog_load.setVisible(true);</p><p> texta.setText(null);</p><p><b> String s;</b></p><p&
67、gt; if(filedialog_load.getFile()!=null)</p><p><b> {</b></p><p><b> try</b></p><p><b> {</b></p><p> File file=new File(filedia
68、log_load.getDirectory(),filedialog_load.getFile());</p><p> FileReader file_reader=new FileReader(file);//讀取字符流</p><p> BufferedReader in=new BufferedReader(file_reader);</p><p>
69、 while((s=in.readLine())!=null)</p><p> texta.append(s+'\n');</p><p> in.close();</p><p> file_reader.close();</p><p><b> }</b></p><p
70、> catch (IOException e1)</p><p><b> {</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p>
71、; if(e.getSource()==itemSave)//查找寫入的文件</p><p><b> {</b></p><p> filedialog_save.setVisible(true);</p><p> if(filedialog_save.getFile()!=null)</p><p><
72、;b> {</b></p><p><b> try</b></p><p><b> {</b></p><p> File file=new File(filedialog_save.getDirectory(),filedialog_save.getFile());</p>&
73、lt;p> FileWriter tofile=new FileWriter(file);//讀取字符流</p><p> BufferedWriter out=new BufferedWriter(tofile);</p><p> out.write(texta.getText(),0,(texta.getText()).length());</p><
74、p> out.close();</p><p> tofile.close();</p><p><b> }</b></p><p> catch (IOException e2)</p><p><b> {</b></p><p><b>
75、}</b></p><p><b> }</b></p><p><b> }</b></p><p> if(e.getSource()==button1)</p><p><b> {</b></p><p> char a[]
76、=texta.getText().toCharArray();/*把texta中獲得的文本,進行初始化,與原字符串長度相等,并將該字符串對象的全部字符復制到該數(shù)組a[]中*/</p><p> texta.setText(null);</p><p><b> int n;</b></p><p> char secret=' &
77、#39;;</p><p> for(int i=0;i<a.length;i++)</p><p><b> {</b></p><p> char c=(char)(secret^a[i]);//進行異或運算</p><p> texta.append(""+c);</p>
78、;<p><b> }</b></p><p><b> }</b></p><p> if(e.getSource()==button2)</p><p><b> {</b></p><p> char a[]=texta.getText().toC
79、harArray();</p><p> texta.setText(null);</p><p><b> int n;</b></p><p> char secret=' ';</p><p> for(int i=0;i<a.length;i++)</p><p&
80、gt;<b> {</b></p><p> char c=(char)(secret^a[i]);//再次異或運算,即還原</p><p> texta.append(""+c);</p><p><b> }</b></p><p><b> }</
81、b></p><p><b> }</b></p><p><b> }</b></p><p> public class E1{</p><p> public static void main(String args[]){</p><p> Myfr
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設計 -- 文件加密與解密
- java課程設計---加密和解密
- java文件加密解密課程設計
- 文件加密與解密—java課程設計報告
- 加密與解密課程設計
- java課程設計文本文檔的加密與解密
- 《c語言課程設計》課程設計--數(shù)據(jù)的加密與解密
- 加密解密程序設計課程設計
- c語言課程設計-文件加密解密
- c語言課程設計-文件加密解密
- c語言課程設計—數(shù)據(jù)加密解密
- 操作系統(tǒng)課程設計報告--加密與解密
- c語言課程設計數(shù)據(jù)的加密與解密
- 微機原理課程設計--加密解密程序設計
- aes課程設計報告--aes加密解密的實現(xiàn)
- 基于java的文件加密解密
- 應用密碼學課程設計-rsa加密解密的設計與實現(xiàn)
- c語言課程設計-文件加密解密(含源代碼)
- java課程設計
- java課程設計----課程設計報告
評論
0/150
提交評論