java技术进阶 基于java的idea加密算法探讨-pg电子官方
随着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