自定义类加载器加载加密的类文件 - 范文中心

自定义类加载器加载加密的类文件

02/24

以TestURL.java为例,先加密TestURL.class文件,再用自定义类装载器加载并运行。import java.io.*;public class TestURL{static public void main( String args[] ) throws Exception {System.out.println("From Main");System.out.println(args[0]);System.out.println(args[1]);}public void tt( ) throws Exception{System.out.println("From tt without args");byte b[]="How are you!".getBytes("UTF8");FileOutputStream f=new FileOutputStream("ssss.txt");f.write(b);}public void tt(String s, int i){System.out.println("Fron tt with args");System.out.println(s);System.out.println(i);}}一、生成对称密钥,并保存到文件中

import java.io.*;import javax.crypto.*;public class Skey_DES{public static void main(String args[]) throws Exception{KeyGenerator kg=KeyGenerator.getInstance("DESede");//指定加密算法为DESedekg.init(168); //密钥长度SecretKey k=kg.generateKey( );//产生密钥FileOutputStream f=new FileOutputStream("key1.dat");//将密钥保存到文件ObjectOutputStream b=new ObjectOutputStream(f);b.writeObject(k);}}二、加密类文件

import java.io.*;import java.security.*;import javax.crypto.*;public class StreamOut{public static void main(String args[]) throws Exception{//获取密钥FileInputStream f=new FileInputStream("key1.dat");ObjectInputStream ob=new ObjectInputStream(f);Key k=(Key)ob.readObject( );//初始化密码器Cipher cp=Cipher.getInstance("DESede");if(args[0].equals("dec"))//解密模式cp.init(Cipher.DECRYPT_MODE, k);else //加密模式cp.init(Cipher.ENCRYPT_MODE, k);FileInputStream in=new FileInputStream(args[1]);//需要加密(解密)的源文件FileOutputStream out=new FileOutputStream(args[2]);//加密(解密)后的文件CipherOutputStream cout=new CipherOutputStream(out, cp);int b=0;while( (b=in.read())!=-1){cout.write(b);}cout.close();out.close();in.close();}}加密运行:

C:\java>java StreamOut enc TestURL.class TestURL1.classC:\java>

在当前目录中删除未加密的TestURL.class,并将加密后的TestURL1.class重命名为TestURL.class

三、自定义类装载器,在当前目录下加载已加密的类文件,并解密

import java.io.*;import java.security.*;import javax.crypto.*;public class MyClassLoader2 extends ClassLoader{//覆盖loadClass( )方法public Class loadClass( String name, boolean resolve )throws ClassNotFoundException {byte[ ] classData=null;Class c = null;try {c = findLoadedClass(name);if (c != null) return(c);try {c=findClass(name);} catch( Exception fnfe ) {}if (c==null){c = findSystemClass (name);}if (resolve && c != null)resolveClass( c );return(c);} catch( Exception e ) {throw new ClassNotFoundException( e.toString());}}public Class findClass( String name){byte[ ] classData=null;try{FileInputStream fkey=new FileInputStream("key1.dat");ObjectInputStream ob=new ObjectInputStream(fkey);Key k=(Key)ob.readObject( );Cipher cp=Cipher.getInstance("DESede");cp.init(Cipher.DECRYPT_MODE, k);//在当前目录下加载名字为name的类文件并解密FileInputStream in=new FileInputStream(name+".class");ByteArrayOutputStream out=new ByteArrayOutputStream( );CipherOutputStream cout=new CipherOutputStream(out, cp);int b=0;while( (b=in.read())!=-1){cout.write(b);}cout.close();classData=out.toByteArray( );} catch(Exception e){ }Class x=defineClass(name, classData, 0, classData.length);return x;}}四、测试类import java.lang.reflect.*;public class MyURL4{static public void main( String args[] ) throws Exception {MyClassLoader3 x=new MyClassLoader3();Class c = x.loadClass(args[0]);Class getArg1[] = { (new String[1]).getClass() };Method m = c.getMethod( "main", getArg1 );String[] my1={"arg1 passed","arg2 passed"};Object myarg1[] = {my1};m.invoke( null, myarg1 );}}运行结果:

C:\java>javac MyClassloader2.javaC:\java>javac MyURL4.java

C:\java>java MyURL4 TestURL

From Main

arg1 passed

arg2 passed

C:\java>


相关内容

  • 介绍款电子杂志制作软件
    以下介绍款电子杂志制作软件: 1.iebook 超级精灵2008 金牌版 软件版本:4.0.0.3[Build 20080530] 最新升级:2009年8月5日 专业级别:★★★★★ 软件大小:92.8MB 简介: iebook 超级精灵是 ...
  • QTP_自动化测试教程
    jÉêÅìêó=nìáÅâqÉëí=mêçÑÉëëáçå~äqj 教程 UKM=版 Mercury QuickTest Professional 教程,8.0 版 本手册及附带的软件和其他文档受美国和国际版权法保护,并且只能依据附带的许可协 ...
  • 15秋福师[网络管理与应用]在线作业二答案
    福师<网络管理与应用>在线作业二 一.单选题(共 50 道试题,共 100 分.) 1. 每个W站点必须有一个主目录来发布信息,IIS默认的主目录为( ). . \Wsit . \Intpu\wwwroot . \Intrnt ...
  • 电脑文件格式大全
    386 Windows虚拟设备驱动程序 CDX 复合索引文件 ABC ASCII编码格式文件 CFG 配置文件,包含系统设备和环境信息 ACM 音频压缩管理驱动程序 CGM Paint Shop Pro映象文件 ACT 文档向导 CHK 被 ...
  • 电脑查询系统的各种命令
    分享到i 贴吧 添加到搜藏 已解决 电脑查询系统的各种命令 悬赏分:0 - 解决时间:2007-9-1 17:13 跪求 提问者: 海港love 明 - 一级 最佳答案 winver---------检查Windows 版本 wmimgmt ...
  • 20**年网络管理员考试模拟题
    互联网专业设备维护人员 考试题库 中国铁通湖南分公司 二○○九年五月 目录 一.填空题 ........................................................ 3 二.单选题 ........... ...
  • 机顶盒智能卡方案
    机顶盒智能卡方案 1 技术背景简要说明 1.1 条件接收 条件接收是指对播出的数字电视节目内容进行数字加扰以建立有效的收费体系,从而保障节目提供商和电视台的利益.条件接收技术主要有三大技术组成:加解扰技术,寻址技术和加解密技术,简单的说来, ...
  • 盲源分离方法
    第30卷第10期2008年10月 Journalof 电子与信息学报 Electronics&InformationTechnology .,01.30No.10 Oct.2008 基于盲源分离的小波域多重音频水印方法 马晓红 孙长 ...
  • 13ABAQUSExplicit准静态分析
    13 ABAQUS/Explicit准静态分析 显式求解方法是一种真正的动态求解过程,它的最初发展是为了模拟高速冲击问题,在这类问题的求解中惯性发挥了主导性作用.当求解动力平衡的状态时,非平衡力以应力波的形式在相邻的单元之间传播.由于最小稳 ...
  • 通信技术--CHINA通信网 软件无线电
    软件无线电 (2002-10-16) 佘其炯 软件无线电的由来 软件无线电最初是在军事通信中提出的,软件无线电作为军用技术已有30年以上的历史,但是由于不同部队用于不同目的的无线电台在工作频段.调制方式上存在差异而无法互通.如果需要互通,就 ...