古詩詞大全網 - 個性簽名 - 在java環境下實現idea算法的加密和解密

在java環境下實現idea算法的加密和解密

基於Java的IDEA加密算法探討

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

就中國而言,雖然國外很多設備可以進口,但是加密設備不能進口,因為這涉及到網絡安全和國家機密信息的安全,所以必須自己研發。目前世界上有很多加密算法,其中DES(數據加密標準)是最早也是應用最廣泛的分組對稱加密算法。DES用56位密鑰加密64位明文,並輸出64位密文。DES的56位密鑰* * *有256種可能的密鑰,但歷史上被窮舉攻擊破解過。1998年,電子前沿基金會(EFF)造價25萬美元制造的專用計算機在56小時內破解了DES密鑰,1999年,EFF在22小時內破解了DES算法,嚴重打擊了DES算法,威脅了其安全性。由於Java語言強大的安全性和網絡處理能力,本文主要介紹利用IDEA(內部數據加密算法)數據加密算法實現JAVA環境下數據的安全傳輸。

1.IDEA數據加密算法

IDEA數據加密算法是由我國學者賴博士和著名密碼學家James L. Massey在1990中共同提出的。它的明文和密文都是64位,但密鑰長度是128位。IDEA實現為叠代分組密碼,使用128位的密鑰和8個周期。這提供了比des更高的安全性,但是在為IDEA選擇密鑰時,應該排除那些被稱為“弱密鑰”的密鑰。DES只有4個弱密鑰和12個子弱密鑰,而IDEA的弱密鑰數量相當可觀,有51的2次方。但如果按鍵總數很大,達到128的2次方,還有77個2的次方鍵可供選擇。這個想法被認為是非常安全的。使用128位密鑰,蠻力攻擊所需的測試次數會比DES明顯增加,甚至允許弱密鑰測試。而且也說明了它對專業形式的分析攻擊特別有抵抗力。

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

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

第三,在Java環境下的實現

1.加密過程的實現

void ea _ enc(int data 11[],/*要加密的64位數據的第壹個地址*/ int key1[]){

int I;

int tmp,x;

int ZZ[]= new int[6];

for(I = 0;我& lt48 ;I += 6) {/* 8個周期*/

for(int j=0,box = I;j & lt6;j++,box++){

ZZ[j]= key 1[box];

}

x = handle _ data(data 11,ZZ);

tmp = data 11[1];/*交換中間的兩個*/

data 11[1]= data 11[2];

data 11[2]= tmp;

}

tmp = data 11[1];/*最後壹輪沒有交換*/

data 11[1]= data 11[2];

data 11[2]= tmp;

data 11[0]= MUL(data 11[0],key 1[48]);

data 11[1]=(char)((data 11[1]+key 1[49])% 0x 10000);

data 11[2]=(char)((data 11[2]+key 1[50])% 0x 10000);

data 11[3]= MUL(data 11[3],key 1[51]);

}

2.解密過程的實現

void key _ decrypt exp(int out key[])/*解密密鑰的逆處理*/

{ int tmp key[]= new int[52];

int I;

for(I = 0;我& lt52 ;i++) {

tmp key[I]= out key[wz _ sp key[I]];/*換位*/

}

for(I = 0;我& lt52 ;i++) {

out key[I]= tmp key[I];

}

for(I = 0;我& lt18 ;i++) {

out key[wz _ spaddrever[I]]=(char)(65536-out key[wz _ spaddrever[I]]);/*替換為加法逆運算*/

}

for(I = 0;我& lt18 ;i++){

out key[wz _ spmulrevr[I]]=(char)(mulinuv(out key[wz _ spmulrevr[I]]);/*替換為反乘法*/

}

}

第四,總結

在實際應用中,我們可以利用Java開發工具包(JDK)中內置的對Socket通信的支持,通過Java流和JCE中的鏈表對基於Socket的網絡通信進行加密。我們知道,加密/解密是數據傳輸中保證數據完整性的常用方法,而Java語言由於其平臺無關性,在互聯網上被廣泛使用。利用Java實現基於IDEA的數據加密傳輸,可以在不同平臺上實現,具有簡單、安全性強的優點。