亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 利用des加密算法保護java源代碼.txt

?? Java源代碼經(jīng)過編譯以后在JVM中執(zhí)行。由于JVM界面是完全透明的
?? TXT
字號:
摘 要:本文首先分析了Java源代碼需要加密的原因,簡要介紹了DES算法及Java密碼體系和Java密碼擴展,最后說明了利用DES加密算法保護Java源代碼的方法及步驟。

關(guān)鍵詞 Java 加密 DES算法

  Java語言是一種非常適用于網(wǎng)絡(luò)編程的語言,它的基本結(jié)構(gòu)與C++極為相似,但拋棄了C/C++中指針等內(nèi)容,同時它吸收了Smalltalk、C++面向?qū)ο蟮木幊趟枷搿K哂泻唵涡浴Ⅳ敯粜浴⒖梢浦残浴討B(tài)性等特點。這些特點使得Java成為跨平臺應(yīng)用開發(fā)的一種規(guī)范,在世界范圍內(nèi)廣泛流傳。

  加密Java源碼的原因

  Java源代碼經(jīng)過編譯以后在JVM中執(zhí)行。由于JVM界面是完全透明的,Java類文件能夠很容易通過反編譯器重新轉(zhuǎn)換成源代碼。因此,所有的算法、類文件等都可以以源代碼的形式被公開,使得軟件不能受到保護,為了保護產(chǎn)權(quán),一般可以有以下幾種方法:

  (1)"模糊"類文件,加大反編譯器反編譯源代碼文件的難度。然而,可以修改反編譯器,使之能夠處理這些模糊類文件。所以僅僅依賴"模糊類文件"來保證代碼的安全是不夠的。

  (2)流行的加密工具對源文件進行加密,比如PGP(Pretty Good Privacy)或GPG(GNU Privacy Guard)。這時,最終用戶在運行應(yīng)用之前必須先進行解密。但解密之后,最終用戶就有了一份不加密的類文件,這和事先不進行加密沒有什么差別。

  (3)加密類文件,在運行中JVM用定制的類裝載器(Class Loader)解密類文件。Java運行時裝入字節(jié)碼的機制隱含地意味著可以對字節(jié)碼進行修改。JVM每次裝入類文件時都需要一個稱為ClassLoader的對象,這個對象負責(zé)把新的類裝入正在運行的JVM。JVM給ClassLoader一個包含了待裝入類(例如java.lang.Object)名字的字符串,然后由ClassLoader負責(zé)找到類文件,裝入原始數(shù)據(jù),并把它轉(zhuǎn)換成一個Class對象。

  用戶下載的是加密過的類文件,在加密類文件裝入之時進行解密,因此可以看成是一種即時解密器。由于解密后的字節(jié)碼文件永遠不會保存到文件系統(tǒng),所以竊密者很難得到解密后的代碼。 

  由于把原始字節(jié)碼轉(zhuǎn)換成Class對象的過程完全由系統(tǒng)負責(zé),所以創(chuàng)建定制ClassLoader對象其實并不困難,只需先獲得原始數(shù)據(jù),接著就可以進行包含解密在內(nèi)的任何轉(zhuǎn)換。

  Java密碼體系和Java密碼擴展

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

  Java密碼學(xué)結(jié)構(gòu)設(shè)計遵循兩個原則:

  (1)算法的獨立性和可靠性。

  (2)實現(xiàn)的獨立性和相互作用性。

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

  下面介紹DES算法及如何利用DES算法加密和解密類文件的步驟。

  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的輸出結(jié)果;如Mode為解密模式,則利用Key對密碼形式的數(shù)據(jù)Data進行解密,還原為Data的明碼形式(64位)作為DES的輸出結(jié)果。在通信網(wǎng)絡(luò)的兩端,雙方約定一致的Key,在通信的源點用Key對核心數(shù)據(jù)進行DES加密,然后以密碼形式在公共通信網(wǎng)(如電話網(wǎng))中傳輸?shù)酵ㄐ啪W(wǎng)絡(luò)的終點,數(shù)據(jù)到達目的地后,用同樣的Key對密碼數(shù)據(jù)進行解密,便再現(xiàn)了明碼形式的核心數(shù)據(jù)。這樣,便保證了核心數(shù)據(jù)在公共通信網(wǎng)中傳輸?shù)陌踩院涂煽啃浴?
  也可以通過定期在通信網(wǎng)絡(luò)的源端和目的端同時改用新的Key,便能更進一步提高數(shù)據(jù)的保密性。
  利用DES算法加密的步驟

  (1)生成一個安全密鑰。在加密或解密任何數(shù)據(jù)之前需要有一個密鑰。密鑰是隨同被加密的應(yīng)用程序一起發(fā)布的一段數(shù)據(jù),密鑰代碼如下所示。

  【生成一個密鑰代碼】

view plaincopy to clipboardprint?
// 生成一個可信任的隨機數(shù)源 
SecureRandom sr = new SecureRandom(); 
// 為我們選擇的DES算法生成一個KeyGenerator對象 
KeyGenerator kg = KeyGenerator.getInstance ("DES" ); 
Kg.init (sr); 
// 生成密鑰 
Secret Key key = kg.generateKey(); 
// 將密鑰數(shù)據(jù)保存為文件供以后使用,其中key Filename為保存的文件名 
Util.writeFile (key Filename, key.getEncoded () ); 
// 生成一個可信任的隨機數(shù)源
SecureRandom sr = new SecureRandom(); 
// 為我們選擇的DES算法生成一個KeyGenerator對象
KeyGenerator kg = KeyGenerator.getInstance ("DES" ); 
Kg.init (sr); 
// 生成密鑰
Secret Key key = kg.generateKey(); 
// 將密鑰數(shù)據(jù)保存為文件供以后使用,其中key Filename為保存的文件名
Util.writeFile (key Filename, key.getEncoded () ); 

  (2)加密數(shù)據(jù)。得到密鑰之后,接下來就可以用它加密數(shù)據(jù)。如下所示。

  【用密鑰加密原始數(shù)據(jù)】



view plaincopy to clipboardprint?
// 產(chǎn)生一個可信任的隨機數(shù)源 
SecureRandom sr = new SecureRandom(); 
//從密鑰文件key Filename中得到密鑰數(shù)據(jù) 
Byte rawKeyData = Util.readFile (key Filename); 
// 從原始密鑰數(shù)據(jù)創(chuàng)建DESKeySpec對象 
DESKeySpec dks = new DESKeySpec (rawKeyData); 
// 創(chuàng)建一個密鑰工廠,然后用它把DESKeySpec轉(zhuǎn)換成Secret Key對象 
SecretKeyFactory key Factory = SecretKeyFactory.getInstance("DES" ); 
Secret Key key = keyFactory.generateSecret( dks ); 
// Cipher對象實際完成加密操作 
Cipher cipher = Cipher.getInstance( "DES" ); 
// 用密鑰初始化Cipher對象 
cipher.init( Cipher.ENCRYPT_MODE, key, sr ); 
// 通過讀類文件獲取需要加密的數(shù)據(jù) 
Byte data = Util.readFile (filename); 
// 執(zhí)行加密操作 
Byte encryptedClassData = cipher.doFinal(data ); 
// 保存加密后的文件,覆蓋原有的類文件。 
Util.writeFile( filename, encryptedClassData ); 
// 產(chǎn)生一個可信任的隨機數(shù)源
SecureRandom sr = new SecureRandom(); 
//從密鑰文件key Filename中得到密鑰數(shù)據(jù)
Byte rawKeyData = Util.readFile (key Filename); 
// 從原始密鑰數(shù)據(jù)創(chuàng)建DESKeySpec對象
DESKeySpec dks = new DESKeySpec (rawKeyData); 
// 創(chuàng)建一個密鑰工廠,然后用它把DESKeySpec轉(zhuǎn)換成Secret Key對象
SecretKeyFactory key Factory = SecretKeyFactory.getInstance("DES" ); 
Secret Key key = keyFactory.generateSecret( dks ); 
// Cipher對象實際完成加密操作
Cipher cipher = Cipher.getInstance( "DES" ); 
// 用密鑰初始化Cipher對象
cipher.init( Cipher.ENCRYPT_MODE, key, sr ); 
// 通過讀類文件獲取需要加密的數(shù)據(jù)
Byte data = Util.readFile (filename); 
// 執(zhí)行加密操作
Byte encryptedClassData = cipher.doFinal(data ); 
// 保存加密后的文件,覆蓋原有的類文件。 
Util.writeFile( filename, encryptedClassData ); 



  (3)解密數(shù)據(jù)。運行經(jīng)過加密的程序時,ClassLoader分析并解密類文件。操作步驟如下所示。 

  【用密鑰解密數(shù)據(jù)】

view plaincopy to clipboardprint?
// 生成一個可信任的隨機數(shù)源 
SecureRandom sr = new SecureRandom(); 
// 從密鑰文件中獲取原始密鑰數(shù)據(jù) 
Byte rawKeyData = Util.readFile( keyFilename ); 
// 創(chuàng)建一個DESKeySpec對象 
DESKeySpec dks = new DESKeySpec (rawKeyData); 
// 創(chuàng)建一個密鑰工廠,然后用它把DESKeySpec對象轉(zhuǎn)換成Secret Key對象 
SecretKeyFactory key Factory = SecretKeyFactory.getInstance( "DES" ); 
SecretKey key = keyFactory.generateSecret( dks ); 
// Cipher對象實際完成解密操作 
Cipher cipher = Cipher.getInstance( "DES" ); 
// 用密鑰初始化Cipher對象 
Cipher.init( Cipher.DECRYPT_MODE, key, sr ); 
// 獲得經(jīng)過加密的數(shù)據(jù) 
Byte encrypted Data = Util.readFile (Filename); 
//執(zhí)行解密操作 
Byte decryptedData = cipher.doFinal( encryptedData ); 
// 然后將解密后的數(shù)據(jù)轉(zhuǎn)化成原來的類文件。 
// 生成一個可信任的隨機數(shù)源
SecureRandom sr = new SecureRandom(); 
// 從密鑰文件中獲取原始密鑰數(shù)據(jù)
Byte rawKeyData = Util.readFile( keyFilename ); 
// 創(chuàng)建一個DESKeySpec對象
DESKeySpec dks = new DESKeySpec (rawKeyData); 
// 創(chuàng)建一個密鑰工廠,然后用它把DESKeySpec對象轉(zhuǎn)換成Secret Key對象 
SecretKeyFactory key Factory = SecretKeyFactory.getInstance( "DES" ); 
SecretKey key = keyFactory.generateSecret( dks ); 
// Cipher對象實際完成解密操作
Cipher cipher = Cipher.getInstance( "DES" ); 
// 用密鑰初始化Cipher對象
Cipher.init( Cipher.DECRYPT_MODE, key, sr ); 
// 獲得經(jīng)過加密的數(shù)據(jù)
Byte encrypted Data = Util.readFile (Filename); 
//執(zhí)行解密操作
Byte decryptedData = cipher.doFinal( encryptedData ); 
// 然后將解密后的數(shù)據(jù)轉(zhuǎn)化成原來的類文件。 

  將上述代碼與自定義的類裝載器結(jié)合就可以做到邊解密邊運行,從而起到保護源代碼的作用。

  結(jié)束語

  加密/解密是數(shù)據(jù)傳輸中保證數(shù)據(jù)安全性和完整性的常用方法,Java語言因其平臺無關(guān)性,在Internet上的應(yīng)用非常之廣泛。使用DES算法加密Java源碼在一定程度上能保護軟件的產(chǎn)權(quán)。

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产三级国产普通话三级| 免费在线观看日韩欧美| 亚洲在线视频一区| 久久不见久久见免费视频1| 本田岬高潮一区二区三区| 欧美一级二级在线观看| 亚洲丝袜自拍清纯另类| 国产精品一级片在线观看| 欧美精品一级二级| 亚洲乱码中文字幕| 国产成人av一区二区三区在线| 日韩欧美国产麻豆| 亚洲午夜精品网| 色久综合一二码| 国产精品国产三级国产a| 久久成人免费电影| 日韩亚洲欧美中文三级| 亚洲妇女屁股眼交7| 欧美综合一区二区| 亚洲免费观看高清完整版在线| 欧美人妇做爰xxxⅹ性高电影| 国产精品理伦片| 日韩电影一二三区| 色噜噜狠狠成人网p站| 国产精品美女一区二区三区| 国产成人在线视频网站| 日韩精品中文字幕一区二区三区 | 日韩美一区二区三区| 一区二区三区毛片| 91日韩精品一区| 亚洲欧美日韩成人高清在线一区| 成人97人人超碰人人99| 国产精品白丝在线| 99re亚洲国产精品| 亚洲男人的天堂一区二区| 波多野洁衣一区| 亚洲人成伊人成综合网小说| 91久久线看在观草草青青| 亚洲综合在线五月| 欧美日韩的一区二区| 日韩精品一级中文字幕精品视频免费观看 | 欧美国产精品久久| 成人国产亚洲欧美成人综合网 | 国产精品99久久久久久宅男| 精品国产一区二区三区忘忧草 | 国产一区二区三区免费播放| 亚洲精品一区二区三区在线观看| 精品一区二区三区免费毛片爱| 亚洲精品一区二区三区福利| 国产资源精品在线观看| 国产精品蜜臀av| 在线欧美小视频| 免费国产亚洲视频| 国产午夜亚洲精品午夜鲁丝片| 国产电影一区在线| 亚洲人成影院在线观看| 欧美老年两性高潮| 国产精品一区二区在线播放| 综合欧美亚洲日本| 欧美精品一二三四| 国产91对白在线观看九色| 亚洲精品乱码久久久久久黑人| 欧美一区二区日韩| 成人高清视频在线| 五月天激情小说综合| 精品国产三级电影在线观看| 不卡一区二区在线| 丝袜诱惑制服诱惑色一区在线观看 | 久久免费国产精品| 99久久精品国产导航| 日韩和欧美一区二区| 国产亚洲婷婷免费| 欧美日韩久久久久久| 国产一区二区三区观看| 一区二区三区四区高清精品免费观看| 538在线一区二区精品国产| 国产激情一区二区三区| 美国欧美日韩国产在线播放| 国产精品热久久久久夜色精品三区| 欧美最猛性xxxxx直播| 国产成人午夜精品5599| 亚洲第一激情av| 国产精品国产三级国产aⅴ原创| 欧美高清hd18日本| 色综合久久天天| 国产剧情一区二区三区| 丝袜美腿亚洲一区| 综合分类小说区另类春色亚洲小说欧美| 91精品国产手机| 欧美亚洲自拍偷拍| 成人黄色一级视频| 国产尤物一区二区在线| 视频一区二区三区在线| 亚洲视频在线一区二区| 国产色91在线| 久久久久综合网| 欧美一级一区二区| 欧美日韩一级二级三级| 91论坛在线播放| 成人免费观看视频| 国产一区二区三区美女| 精品一区二区影视| 日本欧美肥老太交大片| 性感美女极品91精品| 樱桃国产成人精品视频| 国产丝袜美腿一区二区三区| 欧美xxxxxxxxx| 欧美电影免费观看高清完整版在线观看| 色婷婷精品大在线视频| 97精品国产露脸对白| www.亚洲激情.com| 成人性色生活片| 成人网男人的天堂| 岛国一区二区在线观看| 成人毛片在线观看| 成人av在线一区二区三区| 成人一区二区三区视频| 成人免费毛片a| 日韩欧美一区二区视频| 欧美日韩精品一区二区三区蜜桃| 在线观看免费亚洲| 欧美日韩日日夜夜| 91麻豆精品国产91久久久久久| 91精品国产综合久久久久久久| 欧美一区二区精品| 精品久久久久久久人人人人传媒 | 奇米精品一区二区三区四区| 日韩成人一级片| 蜜桃精品在线观看| 国产精品一二三| 成人激情开心网| 在线免费亚洲电影| 日韩免费观看高清完整版| 久久亚洲影视婷婷| 最好看的中文字幕久久| 一二三四社区欧美黄| 日韩专区在线视频| 国产九色sp调教91| 91亚洲午夜精品久久久久久| 欧美日韩国产在线播放网站| 日韩视频在线永久播放| 国产精品素人视频| 亚洲线精品一区二区三区| 蜜臀av在线播放一区二区三区| 国产一区二区女| 91在线观看免费视频| 9191国产精品| 国产亚洲精品精华液| 一区二区三区视频在线看| 麻豆精品久久久| 97国产一区二区| 日韩欧美美女一区二区三区| 欧美经典三级视频一区二区三区| 一区二区成人在线视频| 久久成人免费网| 在线国产亚洲欧美| 国产亚洲自拍一区| 午夜视频在线观看一区| 粉嫩高潮美女一区二区三区| 欧美撒尿777hd撒尿| 国产亚洲综合av| 天堂va蜜桃一区二区三区漫画版| 成人丝袜视频网| 欧美一区二区三区喷汁尤物| 国产精品国产三级国产aⅴ入口| 日韩精品久久理论片| av电影在线不卡| 精品久久久久久久久久久久久久久| 亚洲同性同志一二三专区| 经典一区二区三区| 欧美日韩一级大片网址| 中文字幕制服丝袜一区二区三区 | 亚洲黄色片在线观看| 国产一区在线看| 91精品国产色综合久久不卡电影| 国产精品乱子久久久久| 久久不见久久见中文字幕免费| 欧美色偷偷大香| 国产精品白丝在线| 成人亚洲一区二区一| 日韩精品一区二区三区视频在线观看| 亚洲裸体xxx| 99久久免费视频.com| 久久久精品tv| 激情五月激情综合网| 日韩一区二区三区免费看 | 国产高清在线精品| 日韩欧美激情一区| 日本午夜一本久久久综合| 欧美午夜精品久久久| 亚洲视频图片小说| 99免费精品视频| 国产精品五月天| 国产 欧美在线| 国产欧美日韩视频在线观看| 欧美在线视频全部完| 中文字幕一区免费在线观看| 国产高清精品在线| 国产亚洲欧美色| 国产a级毛片一区|