1 原理, 和使用自定义类加载器加载class 操作流程一样,仅仅是增加加密解密过程,
2 写工具类,将源文件class 异或,后在加载时, 自定义类加载器读取后在异或即可。
加密工具类 public class EncrptUtil { public static void main(String[] args) { encrpt("d:/myjava/HelloWorld.class", "d:/myjava/temp/HelloWorld.class"); } 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 (Exception e) { e.printStackTrace(); }finally{ try { if(fis!=null){ fis.close(); } } catch (IOException e) { e.printStackTrace(); } try { if(fos!=null){ fos.close(); } } catch (IOException e) { e.printStackTrace(); } } } } public class DecrptClassLoader extends ClassLoader { private String rootDir; public DecrptClassLoader(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 classname){ String path = rootDir +"/"+ classname.replace('.', '/')+".class"; // IOUtils,可以使用它将流中的数据转成字节数组 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(Exception e){ e.printStackTrace(); return null; }finally{ try { if(is!=null){ is.close(); } } catch (IOException e) { e.printStackTrace(); } try { if(baos!=null){ baos.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
相关推荐
在实验中,我使用了一款软件工具,它能够自动生成密钥,并执行了从明文输入到加密和解密的完整过程。通过这一部分的实验,我对AES算法的加密机制有了更加全面的理解。 整个实验的过程不仅包括了对密码体制的设计...
在C#编程中,绘图功能是通过System.Drawing命名空间提供的类来实现的,特别是Graphics类,它提供了丰富的API用于在各种图形表面上进行绘制。在这个主题中,我们将深入探讨如何利用C#绘图类来绘制椭圆以及椭圆弧。 ...
赛题分为:电源类、信号源类、高频无线电类、放大器类、仪器仪表类、数据采集与处理类、控制类等七大方向。竞赛时间一般定于竞赛举办年度的8月份。本资源整理了自1997年来历年电赛题目,包含2021年和2023年比赛题目...
第15届全国化合物半导体材料、微波器件和光电器件学术会议定于今年11月召开.pdf
生活垃圾分类主要包括可回收垃圾(如纸类、金属、塑料、玻璃)、厨余垃圾(如剩菜剩饭、骨头等)、有害垃圾(如电池、荧光管)和其他垃圾(如烟蒂、尿布等)四大类。 通过这样的活动,旨在让社区居民深入了解垃圾...
在垃圾分类的具体实施方面,生活垃圾被分为四大类:首先是可回收垃圾,这类垃圾包括纸张、金属、塑料和玻璃等,通过回收再利用可以减少环境污染;其次是厨余垃圾,如食物残渣等,通过堆肥可以转化为有机肥料;第三类...
本文主要探讨了如何进行消防灭火器使用操作演练,以便提升员工的消防安全意识和应急处理能力。 首先,实操的目的在于响应“119消防安全宣传月”的活动号召,强化员工对于办公区域和防火重点区域的消防安全意识,...
MATLAB 仿真超好用,学定于变得,不限你看看,就这个了MATLAB 仿真超好用,学定于变得,不限你看看,就这个了
例如,浙江传媒学院的音乐类和舞蹈类校考定于2月3日至9日,这期间考生需要关注自己的报名确认时间,以及确保能够准时到达考点——湖南大众传媒职业技术学院。而四川大学的音乐类和舞蹈类考试则提前至1月中旬,考点设...
BBSxp 4.00 Whats New 我的日记 增加风格II 增加心情图标 增加头像自定于可以使用URL 监狱中的用户7天之后会自动释放 社区新帖、热门帖子、精华帖子等功能...
数据挖掘是一种从海量数据中提取出有用信息的过程,它结合了计算机科学、统计学和人工智能等领域的知识,旨在发现隐藏的模式、关联、聚类、趋势以及预测模型。本课件集围绕“数据挖掘”这一核心主题,深入浅出地介绍...
计算机基础考试大纲(理工类)-2015级详细解析: 一、考试大纲的目标与考试安排 该考试大纲旨在帮助理工科学生根据自身学习情况和复习进度,明确重点,以便进行有效复习。考试时间定于2015年12月20日周日上午9:50至...
每种类型的火灾需要使用不同的灭火方法和工具,例如水型灭火器用于A类火灾,干粉或二氧化碳灭火器适用于B、C类火灾,砂土可用于D类火灾,而带电设备火灾则需要使用干粉或二氧化碳灭火器来防止触电。 总的来说,酒店...
【垃圾分类从我做起】社会实践活动方案旨在通过实践活动教育和引导一年级一班的学生了解并实践垃圾分类,从而提升他们的环保意识和社会责任感。活动主题明确,旨在让学生亲身参与社区清洁,同时向社区居民传播环保...
3. 活动时间和地点:活动定于2018年10月9日在幼儿园的一楼风雨场地举行,确保所有幼儿和家长都能参与其中,提供一个共享的平台。 4. 活动形式:活动采取全员参与的方式,让每个家庭都有机会参与到环保实践中来,...
通过由平安保卫处组织的消防知识讲解和模拟火点的灭火操作,义务消防员能够向员工展示灭火器等器材的正确使用方法。这样的实际操作演示不仅让员工从理论上了解消防安全的重要性,更能在实际操作中提升自己的消防技能...
这类问题会导致开发者无法正常地进行开发和测试工作。 二、 导入项目出现问题 在使用 Android Studio 1.0 正式版时,可能会出现导入项目的问题。例如,在导入之前的项目时,会出现提示,询问是否使用新的 SDK 版本...
这个界面包括多个选项,如标准CMOS设定(日期和时间)、高级BIOS设置(特性功能)、高级芯片组设置(主板优化)、电源管理、即插即用和PCI设置、加载安全默认值、加载优化默认值、外部设备设定、以及密码设置等。...
在机械工程领域,精密机械类产品的设计与制造尤为复杂,其成功的关键在于精确度和可靠性的完美结合。这两者不仅影响机械设备的性能,还直接决定着产品的质量与稳定性。为了提高精密机械的性能和质量,相关领域的专家...
BBSxp 4.00 Whats New <br>我的日记 <br>增加风格II <br>增加心情图标 <br>增加头像自定于可以使用URL <br>监狱中的用户7天之后会自动释放 <br>社区新帖、热门帖子、精华帖子等功能 <br>五子棋...