基于Java的IDEA加密算法探讨
摘要:本文先容了在JAVA情况下如何实现IDEA对称加密算法。由于电子商务和电子政务的普及,安详加密技能在个中应用很是遍及,对安详加密技能的要求也很高。今朝在JAVA情况下实现IDEA加密具有许多的优势,因为JAVA是基于面向工具的编程语言,而且由于它的平台无关机能被大量应用于Internet的开拓。
要害字:IDEA(Internation Data Encryption Algorithm) JCA JCE 密钥 独立性 靠得住性
跟着Internet的迅速成长,电子商务的海潮势不行挡,日常事情和数据传输都放在Internet网长举办传输,大大提高了效率,低落了本钱,缔造了精采的效益。可是,由于Internet网络协议自己存在着重要的安详问题(IP包自己并不担任任何安详特性,很容易伪造出IP包的地点、修改其内容、重播以前的包以及在传输途中拦截并查察包的内容),使网上的信息传输存在庞大的安详风险电子商务的安详问题也越来越突出。加密是电子商务中最主要的安详技能,加密要领的选取直接影响电子商务勾当中信息的安详水平,在电子商务系统中,主要的安详问题都可以通过加密来办理。数据的保密性可通过差异的加密算法对数据加密来实现。
对我国来讲,固然可以引进许多的外国设备,但加密设备不能依靠引进,因为它涉及到网络安详、国度机要信息的安详,所以必需本身研制。当前国际上有很多加密算法,个中DES(Data Encryption Standard)是发现最早的用得最遍及的分组对称加密算法,DES用56位蜜钥加密64位明文,输出64位密文,DES的56位密钥共有256 种大概的密钥,但汗青上曾操作穷举进攻破解过DES密钥,1998年电子领土基金会(EFF)用25万美元制造的专用计较机,用56小时破解了DES的密钥,1999年,EFF用22小时完成了破解事情,使DES算法受到了严重冲击,使它的安详性受到严重威胁。因为JAVA语言的安详性和网络处理惩罚本领较强,本文主要先容利用IDEA(Internation Data Encryption Algorithm )数据加密算法在Java情况下实现数据的安详传输。
一、IDEA数据加密算法
IDEA数据加密算法是由中国粹者来学嘉博士和著名的暗码专家 James L. Massey 于1990年连系提出的。它的明文和密文都是64比特,但密钥长为128比特。IDEA 是作为迭代的分组暗码实现的,利用 128 位的密钥和 8 个轮回。这比 DES 提供了更多的 安详性,可是在选择用于 IDEA 的密钥时,应该解除那些称为“弱密钥”的密钥。DES 只有四个弱密钥和 12 个次弱密钥,而 IDEA 中的弱密钥数相当可观,有 2 的 51 次方个。可是,假如密钥的总数很是大,到达 2 的 128 次方个,那么仍有 2 的 77 次方个密钥可供选择。IDEA 被认为是极为安详的。利用 128 位的密钥,蛮力进攻中需要举办的测试次数与 DES 对比会明明增大,甚至答允对弱密钥测试。并且,它自己 也显示了它尤其能抵挡专业形式的阐明性进攻。
二、Java暗码体系和Java暗码扩展
Java是Sun公司开拓的一种面向工具的编程语言,而且由于它的平台无关性被大量应用于Internet的开拓。Java暗码体系(JCA)和Java暗码扩展(JCE)的设计目标是为Java提供与实现无关的加密函数API。它们都用factory要领来建设类的例程,然后把实际的加密函数委托给提供者指定的底层引擎,引擎中为类提供了处事提供者接口在Java中实现数据的加密/解密,是利用其内置的JCE(Java加密扩展)来实现的。Java开拓东西集1.1为实现包罗数字签名和信息摘要在内的加密成果,推出了一种基于供给商的新型机动应用编程接口。Java暗码体系布局支持供给商的互操纵,同时支持硬件和软件实现。Java暗码学布局设计遵循两个原则:(1)算法的独立性和靠得住性。(2)实现的独立性和彼此浸染性。算法的独立性是通过界说暗码处事类来得到。用户只需相识暗码算法的观念,而不消去体贴如何实现这些观念。实现的独立性和彼此浸染性通过暗码处事提供器来实现。暗码处事提供器是实现一个或多个暗码处事的一个或多个措施包。软件开拓商按照必然接口,将各类算法实现后,打包成一个提供器,用户可以安装差异的提供器。安装和设置提供器,可将包括提供器的ZIP和JAR文件放在CLASSPATH下,再编辑Java安详属性文件来配置界说一个提供器。Java运行情况Sun版本时,提供一个缺省的提供器Sun。
三、Java情况下的实现
1.加密进程的实现
void idea_enc( int data11[], /*待加密的64位数据首地点*/ int key1[]){
int i ;
int tmp,x;
int zz[]=new int[6];
for ( i = 0 ; i < 48 ; i += 6) { /*举办8轮轮回*/
for(int j=0,box=i;j<6;j++,box++){
zz[j]=key1[box];
}
x = handle_data(data11,zz);
tmp = data11[1]; /*互换中间两个*/
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.解密进程的实现
#p#分页标题#e#
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]] ));/*替换成乘法逆*/
}
}
四、总结
在实际应用中,我们可以利用Java开拓东西包(JDK)中内置的对Socket通信的支持,通过JCE中的Java流和链表,加密基于Socket的网络通信.我们知道,加密/解密是数据传输中担保数据完整性的常用要领,Java语言因其平台无关性,在Internet上的应用很是之遍及.利用Java实现基于IDEA的数据加密传输可以在差异的平台上实现并具有实现简捷、安详性强等利益。