黑马程序员之编写对class文件进行加密的工具类

本文介绍了一种使用Java实现的简单Class文件加密方法,并通过具体示例演示了加密过程及验证加密有效性的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------- android培训java培训、期待与您交流! ----------
 
//加密的方法以及调用加密方法的类

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

}

 
第一步:
运行 ③,此时执行的是加密以前的ClassLoaderAttachment类。运行结果正常:hello,fighting man
第二步:运行 加密工具类
运行 加密工具类的时候,需要设置参数,设置方法如下:
在运行的类上点右键-->run as-->Run Configurations-->

按照上面两个图设置好以后,运行 ,将在cypher目录下生成加密后的class文件。
第三步:
将在cypher目录下生成加密后的class文件,覆盖掉加密前的class文件。
第四步:
再次运行 ,结果会出现异常如下
Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 889275713 in class file fighting/ClassLoaderAttachment
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)
说明加密后的class文件已经不能执行,文件已经成功加密。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值