logo资料库

IDEA算法(java).doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
摘要:本文介绍了在 Java 环境下如何实现 IDEA 对称加密算法。由于电子商务和电子政务的普 及,安全加密技术在其中应用非常广泛,对安全加密技术的要求也很高。目前在 Java 环境下实 现 IDEA 加密具有很多的优势,因为 Java 是基于面向对象的编程语言,并且由于它的平台无关性 能被大量应用于 Inte.Net 的开发。 关键字:IDEA(Internation Data Encryption Algorithm) JCA JCE 密钥 独立性 可靠性 随着 InteNet 的迅速发展,电子商务的浪潮势不可挡,日常工作和数据传输都放在 InteNet 网上进行传输,大大提高了效率,降低了成本,创造了良好的效益。但是,由于 InteNet 网络协议 本身存在着重要的安全问题(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 公司开发的一种面向对象的编程语言,并且由于它的平台无关性被大量应用于 InteNet 的开发。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.解密过程的实现 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 语言因其平台无关性,在 Inte.Net 上的应用非常之广泛.使用 Java 实现基于 IDEA 的数据加密传输可以在不同的平台上实现并具有实现简洁、安全性强等优点。
分享到:
收藏