日期:2014-05-20  浏览次数:20669 次

JAVA DES对称加密技术问题
第三步,用自定义的CLASSLOADER进行加载。参考代码如下:
package com.neusoft.jiami;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import com.neusoft.classloader.MyClassLoader;
public class JieMi {

  public static void main(String[] args) throws Exception {

  // DES算法要求有一个可信任的随机数源
  SecureRandom sr = new SecureRandom();
  // 获得密匙数据
  FileInputStream fi = new FileInputStream(new File("key.txt"));
  byte rawKeyData[] = new byte[fi.available()];// = new byte[5];
  fi.read(rawKeyData);
  fi.close();
  // 从原始密匙数据创建一个DESKeySpec对象
  DESKeySpec dks = new DESKeySpec(rawKeyData);
  // 创建一个密匙工厂,然后用它把DESKeySpec对象转换成一个SecretKey对象
  SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(dks);
  // Cipher对象实际完成解密操作
  Cipher cipher = Cipher.getInstance("DES");
  // 用密匙初始化Cipher对象
  cipher.init(Cipher.DECRYPT_MODE, key, sr);
  // 现在,获取数据并解密
  FileInputStream fi2 = new FileInputStream(new File("DigestPass.class"));
  byte encryptedData[] = new byte[fi2.available()];
  fi2.read(encryptedData);
  fi2.close();
  // 正式执行解密操作
  byte decryptedData[] = cipher.doFinal(encryptedData);
  // 这时把数据还原成原有的类文件
  // FileOutputStream fo = new FileOutputStream(new
  // File("DigestPass.class"));
  // fo.write(decryptedData);
  // 用解密后的数据加载类并应用
  MyClassloader mcl = new MyClassloader("E:/");
  Class cl = mcl.loadClass(decryptedData, "com.neusoft.jiami.DigestPass");
  DigestPass dp = cl.newInstance();
  }
}
这是我在网上找的教程,可是不太懂
这个自定义的classloader类在这儿的具体作用是干什么的?我应该自定义些什么?如何去自定义?
非常感谢大侠的帮忙。。。

------解决方案--------------------
http://www.blogjava.net/realsmy/archive/2007/04/18/111582.html
MyClassLoader是别人自定义的CLASSLOADER,具体代码看链接

JAVA中的每一个类都是通过类加载器加载到内存中的。对于类加载器的工作流程如下表示:
1.searchfile() 
找到我所要加载的类文件。(抛除JAR包的概念,现在只是要加载一个.class文件)
2.loadDataClass()
读取这个类文件的字节码。
3.difineClass()
加载类文件。(加载的过程其实很复杂,我们现在先不研究它。)

从这个过程中我们能很清楚的发现,自定义的类加载能够很轻松的控制每个类文件的加载过程。这样在第二步(loadDataClass)和第三步(difineClass)之间,我们将会有自己的空间灵活的控制这个过程。