您的位置:首页技术文章
文章详情页

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

【字号: 日期:2024-06-29 14:49:34浏览:9作者:猪猪
内容: 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加密扩展即Java Cryptography Extension,简称JCE。它是Sun的加密服务软件,包含了加密和密匙生成功能。JCE是JCA(Java Cryptography Architecture)的一种扩展。 JCE没有规定具体的加密算法,但提供了一个框架,加密算法的具体实现可以作为服务提供者加入。除了JCE框架之外,JCE软件包还包含了SunJCE服务提供者,其中包括许多有用的加密算法,比如DES(Data Encryption Standard)和Blowfish。 为简单计,在本文中我们将用DES算法加密和解密字节码。下面是用JCE加密和解密数据必须遵循的基本步骤:步骤1:生成一个安全密匙。在加密或解密任何数据之前需要有一个密匙。密匙是随同被加密的应用一起发布的一小段数据,Listing 3显示了如何生成一个密匙。 【Listing 3:生成一个密匙】// DES算法要求有一个可信任的随机数源SecureRandom sr = new SecureRandom();// 为我们选择的DES算法生成一个KeyGenerator对象KeyGenerator kg = KeyGenerator.getInstance( 'DES' );kg.init( sr );// 生成密匙SecretKey key = kg.generateKey();// 获取密匙数据byte rawKeyData[] = key.getEncoded();/* 接下来就可以用密匙进行加密或解密,或者把它保存为文件供以后使用 */doSomething( rawKeyData );步骤2:加密数据。得到密匙之后,接下来就可以用它加密数据。除了解密的ClassLoader之外,一般还要有一个加密待发布应用的独立程序(见Listing 4)。 【Listing 4:用密匙加密原始数据】// DES算法要求有一个可信任的随机数源SecureRandom sr = new SecureRandom();byte rawKeyData[] = /* 用某种方法获得密匙数据 */;// 从原始密匙数据创建DESKeySpec对象DESKeySpec dks = new DESKeySpec( rawKeyData );// 创建一个密匙工厂,然后用它把DESKeySpec转换成// 一个SecretKey对象SecretKeyFactory keyFactory = SecretKeyFactory.getInstance( 'DES' );SecretKey key = keyFactory.generateSecret( dks );// Cipher对象实际完成加密操作Cipher cipher = Cipher.getInstance( 'DES' );// 用密匙初始化Cipher对象cipher.init( Cipher.ENCRYPT_MODE, key, sr );// 现在,获取数据并加密byte data[] = /* 用某种方法获取数据 */// 正式执行加密操作byte encryptedData[] = cipher.doFinal( data );// 进一步处理加密后的数据doSomething( encryptedData );步骤3:解密数据。运行经过加密的应用时,ClassLoader分析并解密类文件。操作步骤如Listing 5所示。 【Listing 5:用密匙解密数据】// DES算法要求有一个可信任的随机数源SecureRandom sr = new SecureRandom();byte rawKeyData[] = /* 用某种方法获取原始密匙数据 */;// 从原始密匙数据创建一个DESKeySpec对象DESKeySpec dks = new DESKeySpec( rawKeyData );// 创建一个密匙工厂,然后用它把DESKeySpec对象转换成// 一个SecretKey对象SecretKeyFactory keyFactory = SecretKeyFactory.getInstance( 'DES' );SecretKey key = keyFactory.generateSecret( dks );// Cipher对象实际完成解密操作Cipher cipher = Cipher.getInstance( 'DES' );// 用密匙初始化Cipher对象cipher.init( Cipher.DECRYPT_MODE, key, sr ); Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
标签: Java
相关文章: