明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

基于Java的IDEA加密算法探討

[摘要]本文介紹了在JAVA環(huán)境下如何實(shí)現(xiàn)IDEA對稱加密算法。由于電子商務(wù)和電子政務(wù)的普及,安全加密技術(shù)在其中應(yīng)用非常廣泛,對安全加密技術(shù)的要求也很高。目前在JAVA環(huán)境下實(shí)現(xiàn)IDEA加密具有很多的優(yōu)勢,因?yàn)镴AVA是基于面向?qū)ο蟮木幊陶Z言,并且由于它的平臺(tái)無關(guān)性能被大量應(yīng)用于Internet的開發(fā)。 ...
本文介紹了在JAVA環(huán)境下如何實(shí)現(xiàn)IDEA對稱加密算法。由于電子商務(wù)和電子政務(wù)的普及,安全加密技術(shù)在其中應(yīng)用非常廣泛,對安全加密技術(shù)的要求也很高。目前在JAVA環(huán)境下實(shí)現(xiàn)IDEA加密具有很多的優(yōu)勢,因?yàn)镴AVA是基于面向?qū)ο蟮木幊陶Z言,并且由于它的平臺(tái)無關(guān)性能被大量應(yīng)用于Internet的開發(fā)。 

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

  對我國來講,雖然可以引進(jìn)很多的外國設(shè)備,但加密設(shè)備不能依靠引進(jìn),因?yàn)樗婕暗骄W(wǎng)絡(luò)安全、國家機(jī)密信息的安全,所以必須自己研制。當(dāng)前國際上有許多加密算法,其中DES(Data Encryption Standard)是發(fā)明最早的用得最廣泛的分組對稱加密算法,DES用56位蜜鑰加密64位明文,輸出64位密文,DES的56位密鑰共有256 種可能的密鑰,但歷史上曾利用窮舉攻擊破解過DES密鑰,1998年電子邊境基金會(huì)(EFF)用25萬美元制造的專用計(jì)算機(jī),用56小時(shí)破解了DES的密鑰,1999年,EFF用22小時(shí)完成了破解工作,使DES算法受到了嚴(yán)重打擊,使它的安全性受到嚴(yán)重威脅。因?yàn)镴AVA語言的安全性和網(wǎng)絡(luò)處理能力較強(qiáng),本文主要介紹使用IDEA(Internation Data Encryption Algorithm )數(shù)據(jù)加密算法在Java環(huán)境下實(shí)現(xiàn)數(shù)據(jù)的安全傳輸。 

  一、IDEA數(shù)據(jù)加密算法 

  IDEA數(shù)據(jù)加密算法是由中國學(xué)者來學(xué)嘉博士和著名的密碼專家 James L. Massey 于1990年聯(lián)合提出的。它的明文和密文都是64比特,但密鑰長為128比特。IDEA 是作為迭代的分組密碼實(shí)現(xiàn)的,使用 128 位的密鑰和 8 個(gè)循環(huán)。這比 DES 提供了更多的 安全性,但是在選擇用于 IDEA 的密鑰時(shí),應(yīng)該排除那些稱為“弱密鑰”的密鑰。DES 只有四個(gè)弱密鑰和 12 個(gè)次弱密鑰,而 IDEA 中的弱密鑰數(shù)相當(dāng)可觀,有 2 的 51 次方個(gè)。但是,如果密鑰的總數(shù)非常大,達(dá)到 2 的 128 次方個(gè),那么仍有 2 的 77 次方個(gè)密鑰可供選擇。IDEA 被認(rèn)為是極為安全的。使用 128 位的密鑰,蠻力攻擊中需要進(jìn)行的測試次數(shù)與 DES 相比會(huì)明顯增大,甚至允許對弱密鑰測試。而且,它本身 也顯示了它尤其能抵抗專業(yè)形式的分析性攻擊。 

  二、Java密碼體系和Java密碼擴(kuò)展 

  Java是Sun公司開發(fā)的一種面向?qū)ο蟮木幊陶Z言,并且由于它的平臺(tái)無關(guān)性被大量應(yīng)用于Internet的開發(fā)。Java密碼體系(JCA)和Java密碼擴(kuò)展(JCE)的設(shè)計(jì)目的是為Java提供與實(shí)現(xiàn)無關(guān)的加密函數(shù)API。它們都用factory方法來創(chuàng)建類的例程,然后把實(shí)際的加密函數(shù)委托給提供者指定的底層引擎,引擎中為類提供了服務(wù)提供者接口在Java中實(shí)現(xiàn)數(shù)據(jù)的加密/解密,是使用其內(nèi)置的JCE(Java加密擴(kuò)展)來實(shí)現(xiàn)的。Java開發(fā)工具集1.1為實(shí)現(xiàn)包括數(shù)字簽名和信息摘要在內(nèi)的加密功能,推出了一種基于供應(yīng)商的新型靈活應(yīng)用編程接口。Java密碼體系結(jié)構(gòu)支持供應(yīng)商的互操作,同時(shí)支持硬件和軟件實(shí)現(xiàn)。Java密碼學(xué)結(jié)構(gòu)設(shè)計(jì)遵循兩個(gè)原則:(1)算法的獨(dú)立性和可靠性。(2)實(shí)現(xiàn)的獨(dú)立性和相互作用性。算法的獨(dú)立性是通過定義密碼服務(wù)類來獲得。用戶只需了解密碼算法的概念,而不用去關(guān)心如何實(shí)現(xiàn)這些概念。實(shí)現(xiàn)的獨(dú)立性和相互作用性通過密碼服務(wù)提供器來實(shí)現(xiàn)。密碼服務(wù)提供器是實(shí)現(xiàn)一個(gè)或多個(gè)密碼服務(wù)的一個(gè)或多個(gè)程序包。軟件開發(fā)商根據(jù)一定接口,將各種算法實(shí)現(xiàn)后,打包成一個(gè)提供器,用戶可以安裝不同的提供器。安裝和配置提供器,可將包含提供器的ZIP和JAR文件放在CLASSPATH下,再編輯Java安全屬性文件來設(shè)置定義一個(gè)提供器。Java運(yùn)行環(huán)境Sun版本時(shí),提供一個(gè)缺省的提供器Sun。 

  三、Java環(huán)境下的實(shí)現(xiàn) 

  1.加密過程的實(shí)現(xiàn) 

void idea_enc( int data11[], /*待加密的64位數(shù)據(jù)首地址*/ int key1[]){ 
 int i ; 
 int tmp,x; 
 int zz[]=new int[6]; 
 for ( i = 0 ; i < 48 ; i += 6) { /*進(jìn)行8輪循環(huán)*/ 
  for(int j=0,box=i;j<6;j++,box++){ 
   zz[j]=key1[box]; 
  } 
  x = handle_data(data11,zz); 
  tmp = data11[1]; /*交換中間兩個(gè)*/ 
  data11[1] = data11[2]; 
  data11[2] = tmp; 
 } 
 tmp = data11[1]; /*最后一輪不交換*/ 
 data11[1] = data11[2]; 
 data11[2] = tmp; 
 data11[0] = MUL(data11[0],key1[48]); 
 data11[1] =(char)((data11[1] + key1[49])%0x10000); 
 data11[2] =(char)((data11[2] + key1[50])%0x10000); 
 data11[3] = MUL(data11[3],key1[51]); 


  2.解密過程的實(shí)現(xiàn) 

void key_decryExp(int outkey[])/*解密密鑰的變逆處理*/ 
{ int tmpkey[] = new int[52] ; 
int i; 
for ( i = 0 ; i < 52 ; i++) { 
tmpkey[i] = outkey[ wz_spkey[i] ] ;/*換位*/ 

for ( i = 0 ; i < 52 ; i++) { 
outkey[i] = tmpkey[i]; 

for ( i = 0 ; i < 18 ; i++) { 
outkey[wz_spaddrever[i]] = (char)(65536-outkey[wz_spaddrever[i]]) ;/*替換成加法逆*/ 

for ( i = 0 ; i < 18 ; i++){ 
outkey[wz_spmulrevr[i]] =(char)(mulInv(outkey[wz_spmulrevr[i]] ));/*替換成乘法逆*/ 



  四、總結(jié) 

  在實(shí)際應(yīng)用中,我們可以使用Java開發(fā)工具包(JDK)中內(nèi)置的對Socket通信的支持,通過JCE中的Java流和鏈表,加密基于Socket的網(wǎng)絡(luò)通信.我們知道,加密/解密是數(shù)據(jù)傳輸中保證數(shù)據(jù)完整性的常用方法,Java語言因其平臺(tái)無關(guān)性,在Internet上的應(yīng)用非常之廣泛.使用Java實(shí)現(xiàn)基于IDEA的數(shù)據(jù)加密傳輸可以在不同的平臺(tái)上實(shí)現(xiàn)并具有實(shí)現(xiàn)簡潔、安全性強(qiáng)等優(yōu)點(diǎn)。