熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java技術進階 基於Java的IDEA加密算法探討

2013-11-23 19:38:57  來源: Java核心技術 

  隨著Internet的迅速發展電子商務的浪潮勢不可擋日常工作和數據傳輸都放在Internet網上進行傳輸大大提高了效率降低了成本創造了良好的效益但是由於 Internet網絡協議本身存在著重要的安全問題(IP包本身並不繼承任何安全特性很容易偽造出IP包的地址修改其內容重播以前的包以及在傳輸途中攔截並查看包的內容)使網上的信息傳輸存在巨大的安全風險電子商務的安全問題也越來越突出加密是電子商務中最主要的安全技術加密方法的選取直接影響電子商務活動中信息的安全程度在電子商務系統中主要的安全問題都可以通過加密來解決數據的保密性可通過不同的加密算法對數據加密來實現

  對我國來講雖然可以引進很多的外國設備但加密設備不能依靠引進因為它涉及到網絡安全國家機密信息的安全所以必須自己研制當前國際上有許多加密算法其中DES(Data Encryption Standard)是發明最早的用得最廣泛的分組對稱加密算法DES用位蜜鑰加密位明文輸出位密文DES的位密鑰共有 種可能的密鑰但歷史上曾利用窮舉攻擊破解過DES密鑰年電子邊境基金會(EFF)用萬美元制造的專用計算機小時破解了DES的密鑰EFF用小時完成了破解工作使DES算法受到了嚴重打擊使它的安全性受到嚴重威脅因為JAVA語言的安全性和網絡處理能力較強本文主要介紹使用IDEA(Internation Data Encryption Algorithm )數據加密算法在Java環境下實現數據的安全傳輸

  一IDEA數據加密算法

  IDEA數據加密算法是由中國學者來學嘉博士和著名的密碼專家 James L Massey 於年聯合提出的它的明文和密文都是比特但密鑰長為比特IDEA 是作為迭代的分組密碼實現的使用 位的密鑰和 個循環這比 DES 提供了更多的 安全性但是在選擇用於 IDEA 的密鑰時應該排除那些稱為弱密鑰的密鑰DES 只有四個弱密鑰和 個次弱密鑰而 IDEA 中的弱密鑰數相當可觀 次方個但是如果密鑰的總數非常大達到 次方個那麼仍有 次方個密鑰可供選擇IDEA 被認為是極為安全的使用 位的密鑰蠻力攻擊中需要進行的測試次數與 DES 相比會明顯增大甚至允許對弱密鑰測試而且它本身也顯示了它尤其能抵抗專業形式的分析性攻擊

  二Java密碼體系和Java密碼擴展

  Java是Sun公司開發的一種面向對象的編程語言並且由於它的平台無關性被大量應用於Internet的開發Java密碼體系(JCA)和Java密碼擴展(JCE)的設計目的是為Java提供與實現無關的加密函數API它們都用factory方法來創建類的例程然後把實際的加密函數委托給提供者指定的底層引擎引擎中為類提供了服務提供者接口在Java中實現數據的加密/解密是使用其內置的JCE(Java加密擴展)來實現的Java開發工具集為實現包括數字簽名和信息摘要在內的加密功能推出了一種基於供應商的新型靈活應用編程接口Java密碼體系結構支持供應商的互操作同時支持硬件和軟件實現Java密碼學結構設計遵循兩個原則:()算法的獨立性和可靠性()實現的獨立性和相互作用性算法的獨立性是通過定義密碼服務類來獲得用戶只需了解密碼算法的概念而不用去關心如何實現這些概念實現的獨立性和相互作用性通過密碼服務提供器來實現密碼服務提供器是實現一個或多個密碼服務的一個或多個程序包軟件開發商根據一定接口將各種算法實現後打包成一個提供器用戶可以安裝不同的提供器安裝和配置提供器可將包含提供器的ZIP和JAR文件放在CLASSPATH下再編輯Java安全屬性文件來設置定義一個提供器Java運行環境Sun版本時提供一個缺省的提供器Sun

  三Java環境下的實現

  加密過程的實現

  void idea_enc( int data[] /*待加密的位數據首地址*/ int key[]){
  int i ;
  int tmpx;
  int zz[]=new int[];
  for ( i = ; i < ; i += ) { /*進行輪循環*/
  for(int j=box=i;j<;j++box++){
  zz[j]=key[box];
  }
  x = handle_data(datazz);
  tmp = data[]; /*交換中間兩個*/
  data[] = data[];
  data[] = tmp;
  }
  tmp = data[]; /*最後一輪不交換*/
  data[] = data[];
  data[] = tmp;
  data[] = MUL(data[]key[]);
  data[] =(char)((data[] + key[])%x);
  data[] =(char)((data[] + key[])%x);
  data[] = MUL(data[]key[]);
  }

  解密過程的實現

  void key_decryExp(int outkey[])/*解密密鑰的變逆處理*/
  { int tmpkey[] = new int[] ;
  int i;
  for ( i = ; i < ; i++) {
  tmpkey[i] = outkey[ wz_spkey[i] ] ;/*換位*/
  }
  for ( i = ; i < ; i++) {
  outkey[i] = tmpkey[i];
  }
  for ( i = ; i < ; i++) {
  outkey[wz_spaddrever[i]] = (char)(outkey[wz_spaddrever[i]]) ;/*替換成加法逆*/
  }
  for ( i = ; i < ; i++){
  outkey[wz_spmulrevr[i]] =(char)(mulInv(outkey[wz_spmulrevr[i]] ));/*替換成乘法逆*/
  }
  }

  四總結

  在實際應用中我們可以使用Java開發工具包(JDK)中內置的對Socket通信的支持通過JCE中的Java流和鏈表加密基於Socket的網絡通信我們知道加密/解密是數據傳輸中保證數據完整性的常用方法Java語言因其平台無關性在Internet上的應用非常之廣泛使用Java實現基於IDEA的數據加密傳輸可以在不同的平台上實現並具有實現簡潔安全性強等優點


From:http://tw.wingwit.com/Article/program/Java/hx/201311/27228.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.