Java程序設計基礎項目總結報告java
20135313吳子怡程序員
1、項目內容算法
運用所學Java知識,不調用Java類庫,實現密碼學相關算法的設計,並完成TDD測試,設計運行界面。編程
2、具體任務設計模式
一、要求實現的密碼算法包括:對稱密碼算法,非對稱密碼算法,消息摘要算法。數組
二、要求完成對每一個算法中的public類進行TDD測試,測試代碼儘量多,而且應儘量涵蓋特殊符號、數字、字母等輸入字符。緩存
三、設計每一個密碼算法的GUI界面,提供輸入輸出區域供使用者輸入、查看。模塊化
3、計劃明細函數
週數單元測試 |
進度安排 |
備註 |
Week5 |
查詢項目包含的每一個小塊算法的資料和實現須要的方法以及基礎知識 |
袁徵老師所教的現代密碼學尚起步,對密碼學知識瞭解很少,所以前期查詢自學工做任務較重。 |
Week6 |
閱讀完《圖解密碼技術》的相關內容。 |
學會DES、AES、RSA、ElGamal、SHA-一、MD5的理論。 |
Week7 |
閱讀《Java加密與解密的藝術》內的相關內容,瞭解Java JCA、JCE、JSSE、JAAS。運行調試查詢到的代碼,能夠下載,不用輸入,可以運行。 |
瞭解到程序中對算法代碼的調用和輸入輸出格式等,對本身設計算法時的一些基本操做有了必定了解。 |
Week8 |
預習現代密碼學中的算法:對稱算法、非對稱算法、摘要算法、身份認證這四項。 |
以前經過《圖解密碼技術》學會了各算法的基本思路,本週主要是經過課內教材對具體數學基礎和每一個模塊的計算進行詳細學習。 |
Week9 |
對照理論知識和編程資料,設計算法的實現模塊。 |
無 |
Week10 |
實現對稱算法2個。 |
即不調類庫的DES、AES算法。 |
Week11 |
實現非對稱算法2個。 |
即不調類庫的RSA、ElGamal算法。 |
Week12 |
實現摘要算法2個。並對所實現的6個密碼算法進行修改,經過查詢調類庫實現的Java已經封裝好的密碼算法、網上程序員編寫的代碼,借鑑高級語句,完善代碼。 |
即不調類庫的SHA-一、MD5算法。並借鑑網上的牛人分享的開源代碼,將以前寫的基礎的單個隔離的類修改成包含繼承、接口的代碼塊。 |
Week13 |
使用TDD單元測試對密碼算法進行測試,並對不經過測試的部分進行修改。 |
對每一個public方法都進行TDD測試。 |
Week14 |
學習GUI,爲所實現的密碼算法設計界面。 |
查找GUI的編程實例,在主函數中重點使用了包含輸入、輸出、選擇對話框的語句,簡單設計出可以提供給用戶可視化界面的代碼。 |
Week15 |
將TDD測試代碼作成TDDsuit。將密碼學算法代碼、TDD測試代碼、帶GUI界面的算法主函數分別打成jar包。撰寫期末項目總結報告。 |
無 |
4、設計思路
一、項目設計初期,先經過《現代密碼學》(課內同步教材)、《圖解密碼技術》(課外輔助學習教材)理解選擇設計的密碼算法的思路、計算過程、具體步驟、須要用到的數學理論。
二、根據已掌握的密碼學知識,選擇具體算法,按照計劃安排實現。其中包括:AES、DES、RSA、ElGamal、MD五、SHA-1六個密碼學算法。其中,ElGamal、RSA算法中包含其實現數字簽名(屬於本身擴充拓展練習的算法)的方法。
三、在編寫程序的時候養成對方法進行註釋的習慣,便於修改代碼時的清晰查找以及算法實現後要對外公開供用戶使用時造成幫助文檔。
四、設計過程當中,將一些不須要對外公開的方法或變量設爲private,如:,並引入繼承、接口等用於下降算法耦合度,便於後期優化修改,如:
五、設計中,偶爾嘗試使用單例設計模式,但因爲對Java設計不太熟練,應用不太順手。
六、設計算法時,根據不一樣密碼算法中使用到的數學知識,必須到在線API中查找相關的類和接口,選擇出可以進行模冪運算或求歐拉函數值、生成隨機素數等功能的類來幫助我編寫算法。如:
經過查找API,得知全部操做中,都以二進制補碼形式表示 BigInteger(如 Java 的基本整數類型)。BigInteger 提供全部 Java 的基本整數操做符的對應物,並提供 java.lang.Math 的全部相關方法。另外,BigInteger 還提供如下運算:模算術、GCD 計算、質數測試、素數生成、位操做以及一些其餘操做。
七、在寫測試代碼時,適逢Java課程實驗二正在進行,恰好有機會入門學習TDD測試,我的又上網下載了pdf資料(講述Junit單元測試的相關操做,詳見報告參考文獻),選擇使用assertEqual斷言式測試語句來測試代碼中公開的方法。這些待測的方法大多數是加密方法和解密方法。所以只需在網站上進行在線加解密,生成應得的加解密結果,再與本身編寫的加解密方法加解密相同明密文的結果進行比較,便可得到TDD測試結果。
八、因爲Eclipse編碼及Windows系統編碼的內部問題,有時須要對package的編碼方式進行修改,可是查詢了網上的資料後發現有的地方對中文的加解密仍然存在問題。
即TDD單元測試出現red bar,所以尚待深刻學習優化。
九、在寫GUI界面時,因爲加解密算法不存在太過於複雜的界面設計,所以只須要引入選擇對話框、輸入輸出顯示對話框等便可。自學起來較爲簡單。仍在嘗試着將全部密碼算法綜合在一塊兒編寫帶GUI的主函數,設計出多選擇、簡潔明瞭的Java加解密工程的界面。
5、實現過程
一、DES
(1)包含步驟:
給定64bit的明文M,經過一個固定的初始置換IP來排列獲得M0。
進行16輪相同的迭代運算,這些運算被稱爲輪函數f。
對比特串R16L16使用逆置換IP-1獲得密文C。
(2)方法列表:
其中包含有許多私有的方法用於進行加解密中不少置換、移位的計算以及數制的轉換。
而公開的方法只有加密(encrypt)、解密(dsencrypt)、獲取密鑰(setKey),用於供給用戶使用。
二、AES
(1)算法步驟
SubBytes()、ShiftRows()、MixColums()、AddRoundKey()四個方法。
(2)方法列表
其中包含了AES算法中的四個步驟,分別對應: subbyte、 shift、mix、add和其餘的移位、S盒、數制格式化等私有方法。對外公開的仍然只有文本加解密兩個方法。
三、RSA
(1)算法步驟
找出兩個相異的大素數p,q,計算:n=pq,φ(n)=(p-1)(q-1), n公開,φ(n)保密
隨機生成一個整數e,要求知足:1<e<φ(n)-1,(e,φ(n))=1
應用Enclid算法求出d:
公開密鑰k’=(e,n),祕密密鑰k」=d,(e、d分別稱爲加密指數與解密指數)
(2)方法列表
全部的計算模冪運算均封裝在calculateD()中,加解密方法對外公開。
四、ElGamal
(1)算法步驟
加密算法:設明文爲m,0≤m≤p,隨機選擇一個正整數k,gcd(k,p-1)=1,計算
y1(密文)=gk mod p
y2(密文)=mbk mod p
解密算法: m(明文)=y2 /y1a modp=mbk /gka=mgka /gka =m
(2)方法列表
五、MD5
(1)算法步驟
a.填充
在MD5算法中,首先須要對信息進行填充,使其位長對512求餘的結果等於448,而且填充必須進行,即便其位長對512求餘的結果等於448。
b. 初始化變量
初始的128位值爲初試連接變量,這些參數用於第一輪的運算,以大端字節序來表示。
c. 處理分組數據
第一分組須要將上面四個連接變量複製到另外四個變量中:A到a,B到b,C到c,D到d。從第二分組開始的變量爲上一分組的運算結果,即A = a, B = b, C = c, D = d。
進行四輪主循環,再將所得結果向左環移一個不定的數,並加上a、b、c或d中之一。最後用該結果取代a、b、c或d中之一。
d.輸出
(2)方法列表
其中的calcMD5()就是求消息摘要的算法。
六、SHA-1
(1)算法步驟
步驟一:附加填充比特
步驟二:附加長度值
步驟三:初始化MD緩存
步驟四:處理512比特(16個字)報文分組序列,算法的核心是一個包含4個「循環」的模塊,每循環由20個處理步驟組成
步驟五:輸出
(2)方法列表
其中包含消息摘要的一些非線性函數、數組格式化、數制轉換等私有方法外,對外公開的getDigestOfBytes(byte[])就是求消息摘要的方法。
6、主函數包
7、測試代碼包
8、幫助文檔
9、心得體會
在Java程序設計基礎課程中參加了項目小組,我除了跟隨通常課堂中同步的畢向東老師Java視頻教學之外,更多的是自學和應用。我所作的項目主要是實現與密碼學有關的加解密算法和求消息摘要的算法。由於密碼學算法對於程序運行結果較爲直觀,正確與否更加明顯。並且我我的對於密碼學較有興趣,所以應用Java編寫密碼學程序動力很大。可是在此過程當中也遇到了不少問題。好比在加解密過程當中,結果輸出並非所期待的字節數組。再好比算法對於中文的加解密仍然存在問題、對於繼承、單例等應用不熟練。
同時我也從中學到了更多的技巧,好比運用婁老師所介紹的TDD單元測試進行調試代碼,對GUI界面的設計使用、代碼模塊化的思想、對面向對象等的瞭解更爲深刻。所以,我認爲在參與項目的過程當中雖然壓力更大些,對於密碼學算法、Java的學習進度和強度的要求更爲高些,但終究是受益不淺的。
10、展望
一、將各類算法集成,放在同一個GUI界面中。
二、將算法的耦合度下降,多使用一些繼承、接口、單例的設計。
11、參考文獻
一、51CTO下載-單元測試之道Java版:使用JUnit.pdf
二、Java加密與解密的藝術(第二版) 機械工業出版社 樑棟 著
三、《現代密碼學》(課內教材)、袁徵老師教學PPT
四、《圖解密碼技術》