快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
换成它们各自的加密版本。

步骤4:运行经过加密的应用。用户通过一个DecryptStart程序运行经过加密的应用。DecryptStart程序如Listing 6所示。

【Listing 6:DecryptStart.java,启动被加密应用的程序】

import java.io.*; import java.security.*; import java.lang.reflect.*; import javax.crypto.*; import javax.crypto.spec.*; public class DecryptStart extends ClassLoader ...{   // 这些对象在构造函数中设置,   // 以后loadClass()方法将利用它们解密类   private SecretKey key;   private Cipher cipher;   // 构造函数:设置解密所需要的对象   public DecryptStart( SecretKey key ) throws GeneralSecurityException,IOException ...{    this.key = key;    String algorithm = "DES";    SecureRandom sr = new SecureRandom();    System.err.println( "[DecryptStart: creating cipher]" );    cipher = Cipher.getInstance( algorithm );    cipher.init( Cipher.DECRYPT_MODE, key, sr );   }   // main过程:我们要在这里读入密匙,创建DecryptStart的   // 实例,它就是我们的定制ClassLoader。   // 设置好ClassLoader以后,我们用它装入应用实例,   // 最后,我们通过Java Reflection API调用应用实例的main方法   static public void main( String args[] ) throws Exception ...{    String keyFilename = args[0];    String appName = args[1];    // 这些是传递给应用本身的参数    String realArgs[] = new String[args.length-2];    System.arraycopy( args, 2, realArgs, 0, args.length-2 );    // 读取密匙    System.err.println( "[DecryptStart: reading key]" );    byte rawKey[] = Util.readFile( keyFilename );    DESKeySpec dks = new DESKeySpec( rawKey );    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance( "DES" );    SecretKey key = keyFactory.generateSecret( dks );    // 创建解密的ClassLoader    DecryptStart dr = new DecryptStart( key );    // 创建应用主类的一个实例    // 通过ClassLoader装入它    System.err.println( "[DecryptStart: loading "+appName+"]" );    Class clasz = dr.loadClass( appName );    // 最后,通过Reflection API调用应用实例    // 的main()方法    // 获取一个对main()的引用    String proto[] = new String[1];    Class mainArgs[] = ...{ (new String[1]).getClass() };    Method main = clasz.getMethod( "main", mainArgs );    // 创建一个包含main()方法参数的数组    Object argsArray[] = ...{ realArgs };    System.err.println( "[DecryptStart: running "+appName+".main()]" );    // 调用main()    main.invoke( null, argsArray );   }   public Class loadClass( String name, boolean resolve )   throws ClassNotFoundException ...{    try ...{     // 我们要创建的Class对象     Class clasz = null;     // 必需的步骤1:如果类已经在系统缓冲之中     // 我们不必再次装入它     clasz = findLoadedClass( name );     if (clasz != null)      return clasz;     // 下面是定制部分     try ...{      // 读取经过加密的类文件      byte classData[] = Util.readFile( name+".class" );      if (classData != null) ...{     

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号