URLClassLoader - 使用加密的Jar

时间:2012-03-23 22:18:17

标签: java class memory loader encryption

我见过很多加密类加载器。如:

http://www.javaworld.com/javaworld/javaqa/2003-05/01-qa-0509-jcrypt.html?page=2

那个特别是我正在努力适应我的需求。

我基本上有一个加密的JAR,我已将其解密为字节数组(“byte [] decrypt;”)。

我现在想使用该字节数组来加载类,因此我不需要在包含解密jar的硬盘驱动器上创建文件。

我需要它使用URLClassLoader和NOT ClassLoader,因为我有另一个ClassLoader需要从中获取的数组(“URL [] urls”)。 (除非您可以使用普通的类加载器执行此操作?)

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这看起来非常类似于这篇SO帖子:

Load a Byte Array into a Memory Class Loader

我认为这里唯一的修改是利用父类加载器 - 所以当你创建自定义类加载器的实例时,将URLClassLoader传递给构造函数

public class MyClassLoader extends ClassLoader {
  public MyClassLoader(URLClassLoader parent, byte[] decryptedBytes) {
    super(parent);
    this.decryptedBytes = decryptedBytes;
  }

  protected byte[] decryptedBytes;

  public Class findClass(String name) {
    byte[] b = loadClassData(name);
    if (b != null) {
      return defineClass(name, b, 0, b.length);
    } else {
      // delegate to parent URL classloader
      getParent().findClass(name);
    }
  }

  private byte[] loadClassData(String name) {
    // load the class data from the connection
    // use JarInputStream, find class, load bytes ...
    . . .
  }
}