public class ClassLoaderTest2 {
public static void main(String[] args) throws Exception {
String srcPath = args[0];//要加密的class文件的路径(包含class文件名)
String destDir = args[1];//加密后的class文件存放的目录(只是目录,不包含class文件名)
FileInputStream fis = new FileInputStream(srcPath);
String destFileName = srcPath.substring(srcPath.lastIndexOf('\\')+1);//获得要加密文件的名称
String destPath = destDir +"\\"+destFileName;//确定加密后的文件路径(包含class文件名)
FileOutputStream fos = new FileOutputStream(destPath);
cypher(fis,fos);//调用加密方法
fis.close();//关闭资源
fos.close();
}
/**
* 加密class文件
* 注意:导入InputStream和OutputStream 包的时候要导入java.io下面的,本人手误导入了其他的包,导致在调用cypher(fis,fos);这个方法时,编译器报错,纠结了大半天
*/
private static void cypher(InputStream ips,OutputStream ops) throws Exception{
int b = -1;
while((b=ips.read())!=-1){
//读到数据,写到OutputStream
ops.write(b ^ 0xff);//加密操作
}
}
}
//②要加密的类
/**
* 要加密的类
*
*/
public class ClassLoaderAttachment extends Date {
public String toString(){
return "hello,fighting man";
}
}
//③对加密的类的调用
public class ClassLoaderTest {
public static void main(String[] args) {
//对加密类的调用
System.out.println(new ClassLoaderAttachment().toString());
}
}
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at fighting.ClassLoaderTest.main(ClassLoaderTest.java:25)