利用DES加密算法保護Java源代碼_第1頁
利用DES加密算法保護Java源代碼_第2頁
利用DES加密算法保護Java源代碼_第3頁
利用DES加密算法保護Java源代碼_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、利用DES加密算法保護Java源代碼      摘  要:本文首先分析了Java源代碼需要加密的原因,簡要介紹了DES算法及Java密碼體系和Java密碼擴展,最后說明了利用DES加密算法保護Java源代碼的方法及步驟。關鍵詞   Java  加密  DES算法Java語言是一種非常適用于網(wǎng)絡編程的語言,它的基本結構與C+極為相似,但拋棄了C/C+中指針等內容,同時它吸收了Smalltalk、C+面向對象的編程思想。它具有簡單性、魯棒性、可移植性、動態(tài)性等特點。這些特點使得Java成為跨平臺應用

2、開發(fā)的一種規(guī)范,在世界范圍內廣泛流傳。1        加密Java源碼的原因    Java源代碼經過編譯以后在JVM中執(zhí)行。由于JVM界面是完全透明的,Java類文件能夠很容易通過反編譯器重新轉換成源代碼。因此,所有的算法、類文件等都可以以源代碼的形式被公開,使得軟件不能受到保護,為了保護產權,一般可以有以下幾種方法:(1)“模糊”類文件,加大反編譯器反編譯源代碼文件的難度。然而,可以修改反編譯器,使之能夠處理這些模糊類文件。所以僅僅依賴“模糊類文件”來保證代碼的安全是不夠的。(2)流行的加

3、密工具對源文件進行加密,比如PGP(Pretty Good Privacy)或GPG(GNU Privacy Guard)。這時,最終用戶在運行應用之前必須先進行解密。但解密之后,最終用戶就有了一份不加密的類文件,這和事先不進行加密沒有什么差別。(3)加密類文件,在運行中JVM用定制的類裝載器(Class Loader)解密類文件。Java運行時裝入字節(jié)碼的機制隱含地意味著可以對字節(jié)碼進行修改。JVM每次裝入類文件時都需要一個稱為ClassLoader的對象,這個對象負責把新的類裝入正在運行的JVM。JVM給ClassLoader一個包含了待裝入類(例如

4、java.lang.Object)名字的字符串,然后由ClassLoader負責找到類文件,裝入原始數(shù)據(jù),并把它轉換成一個Class對象。用戶下載的是加密過的類文件,在加密類文件裝入之時進行解密,因此可以看成是一種即時解密器。由于解密后的字節(jié)碼文件永遠不會保存到文件系統(tǒng),所以竊密者很難得到解密后的代碼。    由于把原始字節(jié)碼轉換成Class對象的過程完全由系統(tǒng)負責,所以創(chuàng)建定制ClassLoader對象其實并不困難,只需先獲得原始數(shù)據(jù),接著就可以進行包含解密在內的任何轉換。2        J

5、ava密碼體系和Java密碼擴展Java密碼體系(JCA)和Java密碼擴展(JCE)的設計目的是為Java提供與實現(xiàn)無關的加密函數(shù)API。它們都用factory方法來創(chuàng)建類的例程,然后把實際的加密函數(shù)委托給提供者指定的底層引擎,引擎中為類提供了服務提供者接口在Java中實現(xiàn)數(shù)據(jù)的加密/解密,是使用其內置的JCE(Java加密擴展)來實現(xiàn)的。Java開發(fā)工具集1.1為實現(xiàn)包括數(shù)字簽名和信息摘要在內的加密功能,推出了一種基于供應商的新型靈活應用編程接口。Java密碼體系結構支持供應商的互操作,同時支持硬件和軟件實現(xiàn)。Java密碼學結構設計遵循兩個原則:(1)算法的獨立性和可靠性。(2)實現(xiàn)的獨立

6、性和相互作用性。算法的獨立性是通過定義密碼服務類來獲得。用戶只需了解密碼算法的概念,而不用去關心如何實現(xiàn)這些概念。實現(xiàn)的獨立性和相互作用性通過密碼服務提供器來實現(xiàn)。密碼服務提供器是實現(xiàn)一個或多個密碼服務的一個或多個程序包。軟件開發(fā)商根據(jù)一定接口,將各種算法實現(xiàn)后,打包成一個提供器,用戶可以安裝不同的提供器。安裝和配置提供器,可將包含提供器的ZIP和JAR文件放在CLASSPATH下,再編輯Java安全屬性文件來設置定義一個提供器。Java運行環(huán)境Sun版本時, 提供一個缺省的提供器Sun。下面介紹DES算法及如何利用DES算法加密和解密類文件的步驟。3   

7、60;    DES算法簡介DES(Data Encryption Standard)是發(fā)明最早的最廣泛使用的分組對稱加密算法。DES算法的入口參數(shù)有三個: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的輸出結果;如Mode為解密模式,則利用Key對密碼形式的數(shù)據(jù)Data進行解密,還原為Data的明碼形

8、式(64位)作為DES的輸出結果。在通信網(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ù)在公共通信網(wǎng)中傳輸?shù)陌踩院涂煽啃?。也可以通過定期在通信網(wǎng)絡的源端和目的端同時改用新的Key,便能更進一步提高數(shù)據(jù)的保密性。4        利用DES算法加密的步驟(1)生成一個安全密鑰。在加密或解密任何數(shù)據(jù)之前需要有一個密鑰。密鑰是隨同被加密

9、的應用程序一起發(fā)布的一段數(shù)據(jù),密鑰代碼如下所示?!旧梢粋€密鑰代碼】  / 生成一個可信任的隨機數(shù)源  Secure Random sr = new SecureRandom();  / 為我們選擇的DES算法生成一個KeyGenerator對象  KeyGenerator kg = KeyGenerator.getInstance (“DES" );  Kg.init (sr);  / 生成密鑰  Secret Key key = kg.generateKey();  / 將密鑰數(shù)據(jù)保存為文件供以后使用

10、,其中key Filename為保存的文件名Util.writeFile (key Filename, key.getEncoded () );(2)加密數(shù)據(jù)。得到密鑰之后,接下來就可以用它加密數(shù)據(jù)。如下所示?!居妹荑€加密原始數(shù)據(jù)】    / 產生一個可信任的隨機數(shù)源SecureRandom sr = new SecureRandom();    /從密鑰文件key Filename中得到密鑰數(shù)據(jù)    Byte rawKeyData = Util.readFile (key Filename);

11、0;   / 從原始密鑰數(shù)據(jù)創(chuàng)建DESKeySpec對象    DESKeySpec dks = new DESKeySpec (rawKeyData);    / 創(chuàng)建一個密鑰工廠,然后用它把DESKeySpec轉換成Secret Key對象    SecretKeyFactory key Factory = SecretKeyFactory.getInstance(“DES” );    Secret Key key = keyFactory.gene

12、rateSecret( dks );    / Cipher對象實際完成加密操作    Cipher cipher = Cipher.getInstance( "DES" );    / 用密鑰初始化Cipher對象    cipher.init( Cipher.ENCRYPT_MODE, key, sr );    / 通過讀類文件獲取需要加密的數(shù)據(jù) Byte data = Util.readFile (filen

13、ame);    / 執(zhí)行加密操作    Byte encryptedClassData = cipher.doFinal(data );         / 保存加密后的文件,覆蓋原有的類文件。Util.writeFile( filename, encryptedClassData );   (3)解密數(shù)據(jù)。運行經過加密的程序時,ClassLoader分析并解密類文件。操作步驟如下所示。 【用密鑰解密數(shù)據(jù)】  &#

14、160; / 生成一個可信任的隨機數(shù)源    SecureRandom sr = new SecureRandom();/ 從密鑰文件中獲取原始密鑰數(shù)據(jù)    Byte rawKeyData = Util.readFile( keyFilename );    / 創(chuàng)建一個DESKeySpec對象    DESKeySpec dks = new DESKeySpec (rawKeyData);    / 創(chuàng)建一個密鑰工廠,然后用它把DESKeyS

15、pec對象轉換成Secret Key對象     SecretKeyFactory key Factory = SecretKeyFactory.getInstance( "DES" );    SecretKey key = keyFactory.generateSecret( dks );    / Cipher對象實際完成解密操作    Cipher cipher = Cipher.getInstance( "DES" );

16、60;   / 用密鑰初始化Cipher對象    Cipher.init( Cipher.DECRYPT_MODE, key, sr );/ 獲得經過加密的數(shù)據(jù)    Byte encrypted Data = Util.readFile (Filename);    /執(zhí)行解密操作    Byte decryptedData = cipher.doFinal( encryptedData );/ 然后將解密后的數(shù)據(jù)轉化成原來的類文件。將上述代碼與自定義的類裝載器結合就可以做到邊解密邊運行,從而起到保護源代碼的作用。5        結束語加密/解密是數(shù)據(jù)傳輸中保證數(shù)據(jù)安全性和完整性的常用方法,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論