基于Java的IDEA加密算法

2016-01-29 12:54 18 1 收藏

基于Java的IDEA加密算法,基于Java的IDEA加密算法

【 tulaoshi.com - Java 】

  摘要:本文介绍了在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;
  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; /*交换中间两个*/
  data11 = data11;
  data11 = tmp;
  }
  tmp = data11; /*最后一轮不交换*/
  data11 = data11;
  data11 = tmp;
  data11[0] = MUL(d

来源:http://www.tulaoshi.com/n/20160129/1488046.html

延伸阅读
标签: ASP
  在第一部分,讨论了如何生成密钥,下面将介绍如何使用这个密钥来加密和解密一个 字符串。 下面的代码就是能够同时实现这个功能的函数 Crypt.asp文件 <% Dim g_Key Const g_CryptThis = "Now is the time for all good men to come to the aid of their country." Const g_KeyLocati...
IBM的MARS加密算法实现(上) 作者:西安 吴真 下载MARS加密算法实现代码 一、背景知识 1977年颁布的数据加密标准DES算法。其56位长的密码空间在芯片技术和计算技术高速发展的今天,越来越不适应安全需求。1997年9月美国国家标准技术研究所(NIST)提出了征求新的加密标准---AES (...
1. MD5加密,常用于加密用户名密码,当用户验证时。 protected byte[] encrypt(byte[] obj) ...{     try ...{         MessageDigest md5 = MessageDigest.getInstance("MD5");             md5.update(obj); ...
标签: PHP
本文将介绍一个简单易用的加密/解密算法:使用异或( XOR )运算。本算法原理简单,旨在使读者对信息的加密/解密有一个更加直观的印象。 XOR算法原理 从加密的主要方法看,换位法过于简单,特别是对于数据量少的情况很容易由密文猜出明文,而替换法不失为一种行之有效的简易算法。 从各种替换法运算的特点看,...
标签: ASP
  <% Private Const BITS_TO_A_BYTE = 8 Private Const BYTES_TO_A_WORD = 4 Private Const BITS_TO_A_WORD = 32 Private m_lOnBits(30) Private m_l2Power(30) Private Function LShift(lValue, iShiftBits)     If iShiftBits = 0 Then         LShift = lValue &nbs...

经验教程

924

收藏

62
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部