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");
}
}