古詩詞大全網 - 個性簽名 - Java技術進階 基於Java的IDEA加密算法探討

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

 隨著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 tmp x;  int zz[]=new int[ ];  for ( i = ; i < ; i += ) { /*進行 輪循環*/  for(int j= box=i;j< ;j++ box++){  zz[j]=key [box];  }  x = handle_data(data zz);  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]] ));/*替換成乘法逆*/  }  }

 四 總結

lishixinzhi/Article/program/Java/hx/201311/27228