简单的class文件加密解密
2016-12-19 11:23
417 查看
加密生成的class文件
解密加密后的class文件的类加载器
测试
package com.dasenlin.encrpt; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /** * 测试取反操作 * @author Administrator * */ public class EncriptUtil { /** * @param args */ public static void main(String[] args) { encrpt("E:/LearnJavaProjectText/myjava/HelloWorld.class","E:/LearnJavaProjectText/mytemp/HelloWorld.class"); } /** * 测试的是取反 * @param src * @param dest */ public static void encrpt(String src,String dest){ FileInputStream fis=null; FileOutputStream fos=null; try { fis = new FileInputStream(src); fos = new FileOutputStream(dest); int temp =-1; while((temp=fis.read())!=-1){ fos.write(temp^0xff);//读出的数据进行取反; } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(null!=fis){ fis.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
解密加密后的class文件的类加载器
package com.dasenlin.encrpt; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; /** * 解密的类加载器 * @author Administrator * */ public class DecriptClassLoader extends ClassLoader { private String rootDir; public DecriptClassLoader(String rootDir){ this.rootDir=rootDir; } @Override protected Class<?> findClass(String name) throws ClassNotFoundException { Class<?> c = findLoadedClass(name); if(c!=null){ return c; }else{ ClassLoader parent=this.getParent(); try { c=parent.loadClass(name); } catch (Exception e) { //e.printStackTrace(); } //双亲委托机制,委派给父类加载。 if(c!=null){ return c; }else{ byte[]classData = getClassData(name); if(classData==null){ throw new ClassNotFoundException(); }else{ c=defineClass(name,classData,0,classData.length); } } } return c; } private byte[] getClassData(String name) { String path=rootDir+"/"+name.replace('.', '/')+".class"; InputStream is =null; ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { is=new FileInputStream(path); int temp =-1; while((temp=is.read())!=-1){ baos.write(temp^0xff);//读出的数据进行取反; } return baos.toByteArray(); } catch (FileNotFoundException e) { e.printStackTrace(); return null; } catch (IOException e) { e.printStackTrace(); }finally{ if(is!=null){ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } }
测试
package com.dasenlin.encrpt; /** * 通过自定义的解密类加载器加载 * @author Administrator * */ public class DemoLoad { /** * @param args */ public static void main(String[] args) { DecriptClassLoader loader = new DecriptClassLoader("E:/LearnJavaProjectText/mytemp/"); try { Class<?> c =loader.loadClass("HelloWorld"); System.out.println(c); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
相关文章推荐
- 自定义泪价值器2——加密class文件 解密加载class文件
- QT文件的转码实现简单加密解密
- 使用异或做的简单文件加密和解密
- 文件的简单加密与解密(不安全)
- 简单的对图片文件进行加密解密
- DES 方式:文件加密与解密的简单测试
- 一个简单的C++加密,解密文件程序
- C++ 简单的文件加密和解密 实例
- Qt对中文文件的简单加密解密
- C++实现文件简单加密与解密(读取文件中的字符,对字符转换,然后写入,完成加密,解密反之)
- Java批量加密解密文件简单小程序
- IO流简单应用(文件加密和解密)
- C++ 简单的文件加密和解密 实例
- 简单的对图片文件进行加密解密
- C++ 简单的文件加密和解密 实例
- C语言实现简单文件加密解密
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- 简单的文件加密解密
- java对文件简单的加密解密(异或运算)
- 对文件进行简单加密和解密操作