A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒲公英在飞 中级黑马   /  2014-8-16 19:24  /  1424 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

怎么自己编写类的加载器给文件加密?

6 个回复

倒序浏览
import java.io.*; //主类必须继承ClassLoader,才可以直接使用difineClass public class MyClassLoader1 extends ClassLoader{                          public static void main(String[] args) throws ArrayIndexOutOfBoundsException{         String src = args[0];        String dest = args[1];             // string的 substring方法返回一个新字符串,它是此字符串的一个子字符串。         // lastIndexOf方法返回指定子字符串在此字符串中最右边出现处的索引         String classFileName = src.substring(src.lastIndexOf('\\') + 1);         try {                 InputStream in = new FileInputStream(src);                 OutputStream out = new FileOutputStream(dest + "\\" + classFileName);                     encrypt(in, out);        } catch (FileNotFoundException e) {                 // TODO Auto-generated catch block                e.printStackTrace();         }  }                         // 加密方法                         private static void encrypt(InputStream in, OutputStream out) {                                 int b = -1;                                 try {                                         while ((b = in.read()) != -1) {                                                 out.write(b ^ 0xff);                                 }                                 } catch (IOException e) {                                 // TODO Auto-generated catch block                                e.printStackTrace();                         }                  }                          // 私有化一个ClassDir变量                 private String classDir = null;                public MyClassLoader1() {                                 }                                          // 不能与类同名,但是有返回值,不是构造函数,那个,,                         public MyClassLoader1(String classDir) {                         this.classDir = classDir;                         }                                  /*                  * classLoader的方法,findclass(String name) 使用指定的二进制名称查找类。返回值:Class<?>                          */                                  protected Class<?> findClass(String classname) {                                 // 静态字段separator,返回值是string类型,与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。                                 String classPath = classDir + File.separator + classname + ".class";                                 try {                                 FileInputStream fin = new FileInputStream(new File(classPath));                                         // ByteArrayOutputStream byte数组输出流                                ByteArrayOutputStream bout = new ByteArrayOutputStream();                                 encrypt(fin, bout);                                         // 创建一个byte数组,用byte输出流的方法转换直接转换成byte[]                                 byte[] bytes = bout.toByteArray();                                         // 关闭输入流                                 fin.close();                                         // defineClass将bytes数组,转换成Class类的实例。                                         return defineClass(null, bytes, 0, bytes.length);                                  } catch (FileNotFoundException e) {                                 // TODO Auto-generated catch block                                 e.printStackTrace();                                 } catch (IOException e) {                                         // TODO Auto-generated catch block                                         e.printStackTrace();                         }               return null;         }                                           }
回复 使用道具 举报
学习了,来过
回复 使用道具 举报
谢谢 楼主分享 ,学习了....
回复 使用道具 举报
用Java混淆器
回复 使用道具 举报
这个真不会,貌似挺复杂的
回复 使用道具 举报
liqi 中级黑马 2014-8-19 11:33:41
7#
视频里有的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马