IDEA加密算法在移動(dòng)商務(wù)中的應(yīng)用
移動(dòng)商務(wù)應(yīng)用對(duì)于數(shù)據(jù)傳輸?shù)陌踩杂休^高的要求,需要高效可靠的加密算法對(duì)關(guān)鍵性數(shù)據(jù)如用戶信息、訂單、銷售數(shù)據(jù)等進(jìn)行保護(hù);同時(shí),受限于終端手機(jī)設(shè)備的有限性能,要求所采用的加密算法必須是輕量級(jí)的。為此,我們今天就來和我們大家講一下IDEA加密算法在移動(dòng)商務(wù)中是如何應(yīng)用的。
一、移動(dòng)商務(wù)的特點(diǎn)
移動(dòng)商務(wù)創(chuàng)造更高效、更準(zhǔn)確的信息互動(dòng),以直接面向用戶為特征的隨身通訊和實(shí)時(shí)溝通讓信息傳遞突破了互聯(lián)網(wǎng)局限和在線效率。
移動(dòng)商務(wù)以更廣范的消費(fèi)者覆蓋為基礎(chǔ),將傳統(tǒng)電子商務(wù)的疆界成倍擴(kuò)張。在以客戶為中心的現(xiàn)代商業(yè)社會(huì),將面向互聯(lián)網(wǎng)用戶的關(guān)注更多轉(zhuǎn)向數(shù)倍人口的移動(dòng)通訊消費(fèi)者是更加務(wù)實(shí)更具商業(yè)價(jià)值的轉(zhuǎn)變。
移動(dòng)商務(wù)開拓更大自由尺度的商務(wù)環(huán)境,任何人(Anyone)在任何地點(diǎn)(Anywhere)任何時(shí)間(Anytime)都有條件保持信息溝通,減少傳統(tǒng)電子商務(wù)對(duì)設(shè)備條件與網(wǎng)絡(luò)環(huán)境的要求,降低用戶端參與的門檻。移動(dòng)商務(wù)在給予消費(fèi)者更多使用便利的同時(shí),也為企業(yè)創(chuàng)造了更多商業(yè)機(jī)會(huì)。
1、應(yīng)用的多樣性
隨著無線互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,越來越多的傳統(tǒng)上基于電腦的商務(wù)應(yīng)用被移植到了手機(jī)上。典型的應(yīng)用包括:
PushiMail:將Email主動(dòng),安全地推送到用戶手持終端(手機(jī))上的移動(dòng)Email解決方案,郵箱用戶通過PushEmail服務(wù),可以隨時(shí)隨地通過無線數(shù)據(jù)網(wǎng)絡(luò)使用自己的移動(dòng)終端設(shè)備接收電子郵件。目前較著名的應(yīng)用包括RIM公司的BlackBerry和中移動(dòng)的飛信。
移動(dòng)供應(yīng)鏈:企業(yè)一線銷售人員從移動(dòng)設(shè)備將企業(yè)的進(jìn)銷存、訂單、物流等信息實(shí)時(shí)的收集到總部,從而實(shí)現(xiàn)企業(yè)供應(yīng)鏈的優(yōu)化和渠道信息的扁平化。
2、終端設(shè)備的廣泛性
可用于移動(dòng)商務(wù)的終端設(shè)備類型廣泛,除了已有10年左右,應(yīng)用歷史技術(shù)最成熟的PDA之外,使用各種操作系統(tǒng)的智能手機(jī)如Symbian、WinCE、Linux也得到了日益廣泛的使用,甚至較低端的支持Java應(yīng)用和GPRS上網(wǎng)的普通手機(jī)也已經(jīng)具備了作為移動(dòng)商務(wù)終端的基本條件。
3、數(shù)據(jù)傳輸?shù)木窒扌?/strong>
受無線網(wǎng)絡(luò)性能限制,目前僅適合傳輸小容量數(shù)據(jù)。GPRS的峰值速率為115.2kbit/s,CDMA1X系統(tǒng)的峰值速率為153.6kbit/s。而實(shí)際應(yīng)用中GPRS的平均業(yè)務(wù)速率可以達(dá)到20kbit/s-40kbit/s,CDMA1X的平均業(yè)務(wù)速率為80kbit/s-100kbit/s。這樣的傳輸速度不足以應(yīng)付大容量多媒體數(shù)據(jù)的傳輸,但對(duì)于普通業(yè)務(wù)數(shù)據(jù)的傳輸已經(jīng)足夠。
二、加密算法的選擇
目前主流手機(jī)的CPU頻率普遍在50至120MHz,少部分智能手機(jī)的主頻達(dá)到200MHz以上,內(nèi)存容量在2M至10M,其運(yùn)算能力還無法與計(jì)算機(jī)相提并論。因此選用的加密算法必須具備高效率、高安全性的特點(diǎn)。
IDEA數(shù)據(jù)加密算法是由中國學(xué)者來學(xué)嘉博士和著名的密碼專家JamesL.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ì)明顯增大,甚至允許對(duì)弱密鑰測試。而且,它本身也顯示了它尤其能抵抗專業(yè)形式的分析性攻擊。
Java是Sun公司開發(fā)的一種面向?qū)ο蟮木幊陶Z言,Java在手機(jī)上的開發(fā)版本稱為J2ME(Java2MicroEdition)。由于Java語言使用虛擬機(jī)技術(shù)實(shí)現(xiàn)了平臺(tái)無關(guān)性,使用J2ME開發(fā)的應(yīng)用軟件可以運(yùn)行在數(shù)量眾多的手機(jī)之上。
綜合上述的分析,IDEA加密算法的特性符合移動(dòng)商務(wù)數(shù)據(jù)加密的要求,而使用Java語言實(shí)現(xiàn)的該加密算法可以最廣泛的適用于各種型號(hào)的手機(jī),因此在此選用Java語言作為IDEA加密算法的實(shí)現(xiàn)工具。
三、IDEA加密算法的程序?qū)崿F(xiàn)
注:Flag為加解密標(biāo)記,flag為true表示加密,flag為flase表示解密。
publicbyte[]ideaEncrypt(byte[]bytekey,byte[]inputBytes,booleanflag)
{
byte[]encryptCode=newbyte[8];
int[]key=get_subkey(flag,bytekey);
encrypt(key,inputBytes,encryptCode);
returnencryptCode;
}
privatevoidencrypt(int[]key,byte[]inbytes,byte[]outbytes)
{
intk=0;
inta=bytesToInt(inbytes,0);
intb=bytesToInt(inbytes,2);
intc=bytesToInt(inbytes,4);
intd=bytesToInt(inbytes,6);
for(inti=0;i<8;i++)
{
a=x_multiply_y(a,key[k++]);
b+=key[k++];
b&=0xffff;
c+=key[k++];
c&=0xffff;
d=x_multiply_y(d,key[k++]);
inttmp1=b;
inttmp2=c;
c^=a;
b^=d;
c=x_multiply_y(c,key[k++]);
b+=c;
b&=0xffff;
b=x_multiply_y(b,key[k++]);
c+=b;
c&=0xffff;
a^=b;
d^=c;
b^=tmp2;
c^=tmp1;
}
intToBytes(x_multiply_y(a,key[k++]),outbytes,0);
intToBytes(c+key[k++],outbytes,2);
intToBytes(b+key[k++],outbytes,4);
intToBytes(x_multiply_y(d,key[k]),outbytes,6);
}
privateint[]get_subkey(booleanflag,byte[]bytekey)
{
if(flag)
{
returnencrypt_subkey(bytekey);
}
else
{
returnuncrypt_subkey(encrypt_subkey(bytekey));
}
}
privateint[]encrypt_subkey(byte[]byteKey)
{
int[]key=newint[52];
if(byteKey.length<16)
{
byte[]tmpkey=newbyte[16];
System.a(chǎn)rraycopy(byteKey,0,tmpkey,tmpkey.length-byteKey.length,byteKey.length);
byteKey=tmpkey;
}
for(inti=0;i<8;i++)
{
key[i]=bytesToInt(byteKey,i*2);
}
for(intj=8;j<52;j++)
{
if((j&0x7)<6)
{
key[j]=(((key[j-7]&0x7f)<<9)|(key[j-6]>>7))&0xffff;
}
elseif((j&0x7)==6)
{
key[j]=(((key[j-7]&0x7f)<<9)|(key[j-14]>>7))&0xffff;
}
else
{
key[j]=(((key[j-15]&0x7f)<<9)|(key[j-14]>>7))&0xffff;
}
}
returnkey;
}
privateint[]uncrypt_subkey(int[]key)
{
intdec=52;
intasc=0;
int[]unkey=newint[52];
intaa=fun_a(key[asc++]);
intbb=fun_b(key[asc++]);
intcc=fun_b(key[asc++]);
intdd=fun_a(key[asc++]);
unkey[--dec]=dd;unkey[--dec]=cc;
unkey[--dec]=bb;unkey[--dec]=aa;
for(intk1=1;k1<8;k1++)
{
aa=key[asc++];
bb=key[asc++];
unkey[--dec]=bb;
unkey[--dec]=aa;
aa=fun_a(key[asc++]);
bb=fun_b(key[asc++]);
cc=fun_b(key[asc++]);
dd=fun_a(key[asc++]);
unkey[--dec]=dd;
unkey[--dec]=bb;
unkey[--dec]=cc;
unkey[--dec]=aa;
}
aa=key[asc++];
bb=key[asc++];
unkey[--dec]=bb;
unkey[--dec]=aa;
aa=fun_a(key[asc++]);
bb=fun_b(key[asc++]);
cc=fun_b(key[asc++]);
dd=fun_a(key[asc]);
unkey[--dec]=dd;
unkey[--dec]=cc;
unkey[--dec]=bb;
unkey[--dec]=aa;
returnunkey;
}
IDEA加密算法以其高效安全的特性適用于移動(dòng)商務(wù)的數(shù)據(jù)傳輸文件加密。在實(shí)際應(yīng)用中,將明文數(shù)據(jù)轉(zhuǎn)換成字節(jié)流,經(jīng)IDEA加密算法加密后通過socket(套接字)傳輸,可以獲得數(shù)據(jù)在傳輸安全性和傳輸穩(wěn)定性上的雙重保障。
小知識(shí)之socket
socket的英文原義是“孔”或“插座”。作為4BDS UNIX的進(jìn)程通信機(jī)制,取后一種意思。通常也稱作"套接字",用于描述IP地址和端口,是一個(gè)通信鏈的句柄。在Internet上的主機(jī)一般運(yùn)行了多個(gè)服務(wù)軟件,同時(shí)提供幾種服務(wù)。每種服務(wù)都打開一個(gè)Socket,并綁定到一個(gè)端口上,不同的端口對(duì)應(yīng)于不同的服務(wù)。Socket正如其英文原意那樣,象一個(gè)多孔插座。一臺(tái)主機(jī)猶如布滿各種插座的房間,每個(gè)插座有一個(gè)編號(hào),有的插座提供220伏交流電, 有的提供110伏交流電,有的則提供有線電視節(jié)目。 客戶軟件將插頭插到不同編號(hào)的插座,就可以得到不同的服務(wù)。








