随着Internet的迅速发展电子商务的浪潮势不可挡日常工作和数据传输都放在Internet网上进行传输大大提高了效率降低了成本创造了良好的效益但是由于 Internet网络协议本身存在着重要的安全问题(IP包本身并不继承任何安全特性很容易伪造出IP包的地址修改其内容重播以前的包以及在传输途中拦截并查看包的内容)使网上的信息传输存在巨大的安全风险电子商务的安全问题也越来越突出加密是电子商务中最主要的安全技术加密方法的选取直接影响电子商务活动中信息的安全程度在电子商务系统中主要的安全问题都可以通过加密来解决数据的保密性可通过不同的加密算法对数据加密来实现
对我国来讲虽然可以引进很多的外国设备但加密设备不能依靠引进因为它涉及到网络安全国家机密信息的安全所以必须自己研制当前国际上有许多加密算法其中DES(Data Encryption Standard)是发明最早的用得最广泛的分组对称加密算法DES用位蜜钥加密位明文输出位密文DES的位密钥共有 种可能的密钥但历史上曾利用穷举攻击破解过DES密钥年电子边境基金会(EFF)用万美元制造的专用计算机用小时破解了DES的密钥年EFF用小时完成了破解工作使DES算法受到了严重打击使它的安全性受到严重威胁因为JAVA语言的安全性和网络处理能力较强本文主要介绍使用IDEA(Internation Data Encryption Algorithm )数据加密算法在Java环境下实现数据的安全传输
一IDEA数据加密算法
IDEA数据加密算法是由中国学者来学嘉博士和着名的密码专家 James L Massey 于年联合提出的它的明文和密文都是比特但密钥长为比特IDEA 是作为迭代的分组密码实现的使用 位的密钥和 个循环这比 DES 提供了更多的 安全性但是在选择用于 IDEA 的密钥时应该排除那些称为弱密钥的密钥DES 只有四个弱密钥和 个次弱密钥而 IDEA 中的弱密钥数相当可观有 的 次方个但是如果密钥的总数非常大达到 的 次方个那么仍有 的 次方个密钥可供选择IDEA 被认为是极为安全的使用 位的密钥蛮力攻击中需要进行的测试次数与 DES 相比会明显增大甚至允许对弱密钥测试而且它本身也显示了它尤其能抵抗专业形式的分析性攻击
二Java密码体系和Java密码扩展
Java是Sun公司开发的一种面向对象的编程语言并且由于它的平台无关性被大量应用于Internet的开发Java密码体系(JCA)和Java密码扩展(JCE)的设计目的是为Java提供与实现无关的加密函数API它们都用factory方法来创建类的例程然后把实际的加密函数委托给提供者指定的底层引擎引擎中为类提供了服务提供者接口在Java中实现数据的加密/解密是使用其内置的JCE(Java加密扩展)来实现的Java开发工具集为实现包括数字签名和信息摘要在内的加密功能推出了一种基于供应商的新型灵活应用编程接口Java密码体系结构支持供应商的互操作同时支持硬件和软件实现Java密码学结构设计遵循两个原则:()算法的独立性和可靠性()实现的独立性和相互作用性算法的独立性是通过定义密码服务类来获得用户只需了解密码算法的概念而不用去关心如何实现这些概念实现的独立性和相互作用性通过密码服务提供器来实现密码服务提供器是实现一个或多个密码服务的一个或多个程序包软件开发商根据一定接口将各种算法实现后打包成一个提供器用户可以安装不同的提供器安装和配置提供器可将包含提供器的ZIP和JAR文件放在CLASSPATH下再编辑Java安全属性文件来设置定义一个提供器Java运行环境Sun版本时提供一个缺省的提供器Sun
三Java环境下的实现
加密过程的实现
void idea_enc( int data[] /*待加密的位数据首地址*/ int key[]){
int i ;
int tmpx;
int zz[]=new int[];
for ( i = ; i < ; i += ) { /*进行轮循环*/
for(int j=box=i;j<;j++box++){
zz[j]=key[box];
}
x = handle_data(datazz);
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_decryExp(int outkey[])/*解密密钥的变逆处理*/
{ int tmpkey[] = new int[] ;
int i;
for ( i = ; i < ; i++) {
tmpkey[i] = outkey[ wz_spkey[i] ] ;/*换位*/
}
for ( i = ; i < ; i++) {
outkey[i] = tmpkey[i];
}
for ( i = ; i < ; i++) {
outkey[wz_spaddrever[i]] = (char)(outkey[wz_spaddrever[i]]) ;/*替换成加法逆*/
}
for ( i = ; i < ; i++){
outkey[wz_spmulrevr[i]] =(char)(mulInv(outkey[wz_spmulrevr[i]] ));/*替换成乘法逆*/
}
}
四总结
在实际应用中我们可以使用Java开发工具包(JDK)中内置的对Socket通信的支持通过JCE中的Java流和链表加密基于Socket的网络通信我们知道加密/解密是数据传输中保证数据完整性的常用方法Java语言因其平台无关性在Internet上的应用非常之广泛使用Java实现基于IDEA的数据加密传输可以在不同的平台上实现并具有实现简洁安全性强等优点