Java技术进阶 基于Java的IDEA加密算法探讨

 我来答
世纪网络17
2022-10-12 · TA获得超过5958个赞
知道小有建树答主
回答量:2426
采纳率:100%
帮助的人:144万
展开全部

  随着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 tmp x;  int zz[]=new int[ ];  for ( i = ; i < ; i += ) { /*进行 轮循环*/  for(int j= box=i;j< ;j++ box++){  zz[j]=key [box];  }  x = handle_data(data zz);  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]] ));/*替换成乘法逆*/  }  }

  四 总结

lishixinzhi/Article/program/Java/hx/201311/27228

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式