當前位置:股票大全官網 - 基金投資 - 高級Java技術中基於Java的IDEA加密算法探討

高級Java技術中基於Java的IDEA加密算法探討

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

對於中國來說,雖然很多國外的設備可以進口,但是加密設備是不能進口的,因為這涉及到網絡安全和國家機密信息的安全,所以必須要研發自己的加密算法,其中國際上有DES(數據加密標準)。它是最早也是應用最廣泛的分組對稱加密算法DES,用比特蜜密鑰加密比特明文,輸出比特密文DES的比特密鑰* * *存在壹個可能的密鑰,但歷史上DES密鑰曾被窮舉攻擊破解過。萬元制造的專用計算機在小時內破解了DES的密鑰,而EFF每年都要在小時內完成破解工作,使得DES算法受到嚴重打擊,嚴重威脅其安全性,因為JAVA語言的安全性和網絡處理能力都很強。本文主要介紹了在Java環境下使用IDEA(內部數據加密算法)數據加密算法實現數據的安全傳輸。

壹種理想的數據加密算法

IDEA數據加密算法是由中國學者薛佳博士和著名密碼學家詹姆斯·L·馬西於年共同提出的。它的明文和密文都是比特,但密鑰長度是比特。IDEA是作為壹種叠代分組密碼實現的,它使用密鑰位和周期,比des提供更高的安全性,但在為IDEA選擇密鑰時應排除這些因素。被稱為弱密鑰的密鑰DES只有四個弱密鑰和壹個第二弱密鑰,但IDEA中弱密鑰的數量是可觀的冪。但是,如果鍵的總數非常大,仍然有電源鍵可供選擇。想法被認為是極其安全的。與DES相比,使用bits的蠻力攻擊所需的測試次數會明顯增加,甚至允許測試弱密鑰,本身就說明它特別抗專業的分析攻擊。

二、Java密碼系統和Java密碼擴展

Java是Sun公司開發的面向對象編程語言,由於其平臺無關性,被廣泛應用於互聯網的Java密碼系統(JCA)和Java密碼系統擴展(JCE)的開發中。設計的目的是為Java提供壹個與實現無關的加密函數API。都是用工廠方法創建類的例程,然後把實際的加密功能委托給提供者指定的底層引擎,底層引擎為類提供壹個服務提供者接口。Java中的數據加密/解密是利用其內置的JCE(Java Encryption Extension)實現的。由實現的Java開發工具集提供了壹個基於供應商的新的靈活的應用程序編程接口,用於實現加密功能,包括數字簽名和信息摘要。Java密碼體系結構支持廠商的互操作性和軟硬件的實現。Java密碼體系結構的設計遵循兩個原則: ()算法的獨立性和可靠性()。通過定義加密服務類來獲得加密算法的獨立性和交互性。用戶只需要理解密碼算法的概念,而不需要關心如何實現這些概念的獨立性和交互性。加密服務提供程序是實現壹個或多個加密服務的壹個或多個包。軟件開發者將各種算法按照壹定的接口打包成壹個提供者,用戶可以安裝。使用不同的提供程序安裝和配置提供程序。您可以將包含提供者的ZIP和JAR文件放在類路徑中,然後編輯Java安全屬性文件,以便在定義提供者Java運行時環境Sun版本時設置默認的提供者Sun。

Java環境下的實現

加密過程的實現

Void idea_enc( int data [] /*要加密的位數據的首地址*/int key[]){ int I;int tmp x;int ZZ[]= new int[];for(I =;我& lt;I+=){/* Round cycle */for(int j = box = I;j & lt;j++ box++){ ZZ[j]= key[box];} x = handle_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 _ decrypt exp(int out key[])/*解密密鑰的逆處理*/{ int tmpkey[]= new int[];int I;for(I =;我& lt;i++){ tmpkey[I]= out key[wz _ sp key[I]];/* transposation */} for(I =;我& lt;i++){ out key[I]= tmp key[I];} for(I =;我& lt;i++){ out key[wz _ spaddrever[I]]=(char)(out key[wz _ spaddrever[I]]);/*替換為加法逆*/}(I =;我& lt;i++){ out key[wz _ spmulrevr[I]]=(char)(mulinuv(out key[wz _ spmulrevr[I]]));/*替換為乘法逆運算*/}}

四個總結

Lishi Xinzhi/Article/program/Java/hx/201311/27228