快速业务通道

运用加密技术保护Java源代码 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
// 注意,MyClass所需要的所有其他类,都将通过 // 定制的ClassLoader自动装入

运用加密技术保护Java源代码(2)

时间:2011-01-02

如前所述,定制ClassLoader只需先获取类文件的数据,然后把字节码传递给运行时系统,由后者完成余下的任务。

ClassLoader有几个重要的方法。创建定制的ClassLoader时,我们只需覆盖其中的一个,即loadClass,提供获取原始类文件数据的代码。这个方法有两个参数:类的名字,以及一个表示JVM是否要求解析类名字的标记(即是否同时装入有依赖关系的类)。如果这个标记是true,我们只需在返回JVM之前调用resolveClass。

【Listing 2:ClassLoader.loadClass()的一个简单实现】

public Class loadClass( String name, boolean resolve ) throws ClassNotFoundException ...{   try ...{    // 我们要创建的Class对象    Class clasz = null;    // 必需的步骤1:如果类已经在系统缓冲之中,    // 我们不必再次装入它    clasz = findLoadedClass( name );    if (clasz != null)     return clasz;    // 下面是定制部分    byte classData[] = /**//* 通过某种方法获取字节码数据 */;    if (classData != null) ...{     // 成功读取字节码数据,现在把它转换成一个Class对象     clasz = defineClass( name, classData, 0, classData.length );    }    // 必需的步骤2:如果上面没有成功,    // 我们尝试用默认的ClassLoader装入它    if (clasz == null)     clasz = findSystemClass( name );    // 必需的步骤3:如有必要,则装入相关的类    if (resolve && clasz != null)     resolveClass( clasz );    // 把类返回给调用者    return clasz;   } catch( IOException ie ) ...{    throw new ClassNotFoundException( ie.toString() );   } catch( GeneralSecurityException gse ) ...{    throw new ClassNotFoundException( gse.toString() );   } }

Listing 2显示了一个简单的loadClass实现。代码中的大部分对所有ClassLoader对象来说都一样,但有一小部分(已通过注释标记)是特有的。在处理过程中,ClassLoader对象要用到其他几个辅助方法:

findLoadedClass:用来进行检查,以便确认被请求的类当前还不存在。loadClass方法应该首先调用它。

defineClass:获得原始类文件字节码数据之后,调用defineClass把它转换成一个Class对象。任何loadClass实现都必须调用这个方法。

findSystemClass:提供默认ClassLoader的支持。如果用来寻找类的定制方法不能找到指定的类(或者有意地不用定制方法),则可以调用该方法尝试默认的装入方式。这是很有用的,特别是从普通的JAR文件装入标准Java类时。

resolveClass:当JVM想要装入的不仅包括指定的类,而且还包括该类引用的所有其他类时,它会把loadClass的resolve参数设置成true。这时,我们必须在返回刚刚装入的Class对象给调用者之前调用resolveClass。

运用加密技术保护Java源代码(3)

时间:2011-01-02

三、加密、解密

Java加密扩展即Java Cryptography Extension,简称JCE。它是Sun的加密服务软件,包含了加密和密匙生成功能。JCE是JCA(Java Cryptography Architecture)的一种扩展。

JCE没有规定具体的加密算法,但提供了一个框架,加密算法的具体实现可以作为服务提供者加入。除了JCE框架之外,JCE软件包还包含了SunJCE服务提供者,其中包括许多有用的加密算法,比如DES(Data Encryption Standard)和Blowfish。

为简单计,在本文中我们将用DES算法加密和解密字节码。下面是用JCE加密和解密数据必须遵循的基本步骤:

步骤1:生成一个

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号