首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>java>JAVA技术>正文

Java安全:运用加密技术保护Java源代码

http://www.oklinux.cn  2008-06-19  IBM DW专区 俞良松  会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

为什么要加密?

对于传统的C或C 之类的语言来说,要在Web上保护源代码是很容易的,只要不发布它就可以。遗憾的是,Java程序的源代码很容易被别人偷看。只要有一个反编译器,任何人都可以分析别人的代码。Java的灵活性使得源代码很容易被窃取,但与此同时,它也使通过加密保护代码变得相对容易,我们唯一需要了解的就是Java的ClassLoader对象。当然,在加密过程中,有关Java Cryptography Extension(JCE)的知识也是必不可少的。

有几种技术可以“模糊”Java类文件,使得反编译器处理类文件的效果大打折扣。然而,修改反编译器使之能够处理这些经过模糊处理的类文件并不是什么难事,所以不能简单地依赖模糊技术来保证源代码的安全。

我们可以用流行的加密工具加密应用,比如PGP(Pretty Good Privacy)或GPG(GNU Privacy Guard)。这时,最终用户在运行应用之前必须先进行解密。但解密之后,最终用户就有了一份不加密的类文件,这和事先不进行加密没有什么差别。

Java运行时装入字节码的机制隐含地意味着可以对字节码进行修改。JVM每次装入类文件时都需要一个称为ClassLoader的对象,这个对象负责把新的类装入正在运行的JVM。JVM给ClassLoader一个包含了待装入类(比如java.lang.Object)名字的字符串,然后由ClassLoader负责找到类文件,装入原始数据,并把它转换成一个Class对象。

我们可以通过定制ClassLoader,在类文件执行之前修改它。这种技术的应用非常广泛――在这里,它的用途是在类文件装入之时进行解密,因此可以看成是一种即时解密器。由于解密后的字节码文件永远不会保存到文件系统,所以窃密者很难得到解密后的代码。

由于把原始字节码转换成Class对象的过程完全由系统负责,所以创建定制ClassLoader对象其实并不困难,只需先获得原始数据,接着就可以进行包含解密在内的任何转换。

Java 2在一定程度上简化了定制ClassLoader的构建。在Java 2中,loadClass的缺省实现仍旧负责处理所有必需的步骤,但为了顾及各种定制的类装入过程,它还调用一个新的findClass方法。

这为我们编写定制的ClassLoader提供了一条捷径,减少了麻烦:只需覆盖findClass,而不是覆盖loadClass。这种方法避免了重复所有装入器必需执行的公共步骤,因为这一切由loadClass负责。

不过,本文的定制ClassLoader并不使用这种方法。原因很简单。如果由默认的ClassLoader先寻找经过加密的类文件,它可以找到;但由于类文件已经加密,所以它不会认可这个类文件,装入过程将失败。因此,我们必须自己实现loadClass,稍微增加了一些工作量。

查看原文>>

http://www.ibm.com/developerworks/cn/java/l-secureclass/


上一篇:Java安全:用Kerberos为J2ME应用程序上锁   下一篇:J2EE探索者:用JAAS和JSSE实现Java安全性

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·J2EE探索者:用JAAS和JSSE实现Java安全性
·Java安全:用Kerberos为J2ME应用程序上锁
·Java安全通信:为高级JSSE开发人员定制SSL
·介绍J2EE应用程序的授权概念和解决方案
·实例教程:Java Socket编程的一个秘密类
·用Java语言编写通过代理访问的应用程序
·Tomcat下JSP、Servlet和JavaBean环境配置
·JSF与WEB完美应用组合 高度提升开发效率
·进阶教程:编写高级JavaScript应用代码
·动态Proxy与Java ACL用户访问控制机制实现
·JSP调用SQL server 2000的存储过程
·面向Java开发人员db4o指南:数组和集合
·JAVA综合--如何掌握JDK1.5枚举类型
·JAVA技术:AJAX jsp无刷新验证码实例
·使用prototype.js写的读取RSS的例子
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·介绍J2EE应用程序的授权概念和解决方案
·Java安全通信:为高级JSSE开发人员定制S
·J2EE探索者:用JAAS和JSSE实现Java安全
·Java安全:用Kerberos为J2ME应用程序上
·实例教程:Java Socket编程的一个秘密类
·用Java语言编写通过代理访问的应用程序
·Tomcat下JSP、Servlet和JavaBean环境配
·JSF与WEB完美应用组合 高度提升开发效
·进阶教程:编写高级JavaScript应用代码
·动态Proxy与Java ACL用户访问控制机制
·JSP调用SQL server 2000的存储过程
·面向Java开发人员db4o指南:数组和集合
  阅读排行
·JAVA技术:AJAX jsp无刷新验证码实例
·使用prototype.js写的读取RSS的例子
·进阶教程:编写高级JavaScript应用代码
·JSP调用SQL server 2000的存储过程
·JAVA综合--如何掌握JDK1.5枚举类型
·JSF与WEB完美应用组合 高度提升开发效
·动态Proxy与Java ACL用户访问控制机制
·实例教程:Java Socket编程的一个秘密类
·Tomcat下JSP、Servlet和JavaBean环境配
·用Java语言编写通过代理访问的应用程序
·面向Java开发人员db4o指南:数组和集合
·Java安全:用Kerberos为J2ME应用程序上
·J2EE探索者:用JAAS和JSSE实现Java安全
·Java安全通信:为高级JSSE开发人员定制S
·介绍J2EE应用程序的授权概念和解决方案
网摘收藏: