自己写的类加载器

1.编写自己的需要加密类继承java.util.Date类如下

 

 

package cn.itcast.loader;


import java.util.Date;

public class CryptoClass extends Date {

 @Override
 public String toString() {
  // TODO Auto-generated method stub
  return "我是被加密的类";
 }
 
}

 

 

2.编写加密类

在运行加密类之前要先做的工作有

【1】首先要找到修要加密的类的路径,注意这是应该是找的.class文件,把它的目录拷贝到---

操作在MyEclipse--点击右键--选中Run as -->选中Run config...

这时会弹出一个对话框选中argusments增加类的路径到系统参数

【2】在当前目录下新建一个crypto目录

 

【3】执行下面的代码 

package cn.itcast.loader;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class CryptoClassLoader extends ClassLoader {

 /**
  * @param args
  * @throws FileNotFoundException
  */
 public static void main(String[] args) throws FileNotFoundException {
  // TODO Auto-generated method stub
  String srcPath = args[0];
  String destDir = args[1];
  
  FileInputStream fis = new FileInputStream(srcPath);
  
  String srcDir = srcPath.substring(srcPath.lastIndexOf('//') + 1);
  String destPath = destDir +"//"+ srcDir;
  System.out.println("srcPath:" + srcPath);
  System.out.println("destPath:" + destPath);
  FileOutputStream fos = new FileOutputStream(destPath);
  
  System.out.println("开始执行");
  cryptoClass(fis, fos);
  System.out.println("结束执行");
  
 }
 public static void cryptoClass(InputStream is,OutputStream os) {
  int b = -1;
  try {
   while(( b = is.read()) != -1) {
     os.write(b ^ 0xff);
   }
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 private String classDir;
 @Override
 protected Class<?> findClass(String name) throws ClassNotFoundException {
  // TODO Auto-generated method stub
  try {
   String fileName = classDir + "//" + name.substring(name.lastIndexOf(".") + 1) + ".class";
   FileInputStream fis = new FileInputStream(fileName);
   ByteArrayOutputStream bytes = new ByteArrayOutputStream();
   cryptoClass(fis, bytes);
   byte[] bys = bytes.toByteArray();
   return defineClass(bys, 0, bys.length);
  } catch (Exception e) {
   e.printStackTrace();
  }
  return super.findClass(name);
 }
 public CryptoClassLoader() {
  
 }
 public CryptoClassLoader(String classDir) {
  this.classDir = classDir;
 }
}

【4】

把当前目录/bin/cn/itcast/loader/CryptoClass.class删除掉

【5】

把当前目录的/crypto/目录下的CryptoClass.class拷贝到【4】的目录中

【6】

执行以下代码这是运行的就是我们加密和解密之后的class文件

 

3.编写实验类

 

package cn.itcast.loader;

import java.util.Date;

public class CryptoClassLoaderTest {

 /**
  * @param args
  * @throws ClassNotFoundException
  * @throws IllegalAccessException
  * @throws InstantiationException
  */
 public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
  // TODO Auto-generated method stub
  //System.out.println(new CryptoClass());
  Class clazz = new CryptoClassLoader("crypto").loadClass("cn.itcast.loader.CryptoClass");
  Date date = (Date) clazz.newInstance();
  System.out.println(date + "adf");
 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值