Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过URLCassloader加载加密的JAR文件_Java_Aes_Classloader_Encryption - Fatal编程技术网

Java 通过URLCassloader加载加密的JAR文件

Java 通过URLCassloader加载加密的JAR文件,java,aes,classloader,encryption,Java,Aes,Classloader,Encryption,我一直在编写一个小系统来动态加载AES加密的jar文件。 我的代码: 我错过什么了吗?谢谢你抽出时间 您正在将加密jar的url添加到URLClassLoader。您希望URLClassLoader在加载jar时如何解密它 最好的办法是实现一个自定义类加载器。扩展SecureClassLoader并实现相关方法。javadocs中有一个基本示例。您正在将加密jar的url添加到URLClassLoader中。您希望URLClassLoader在加载jar时如何解密它 最好的办法是实现一个自定义类

我一直在编写一个小系统来动态加载AES加密的jar文件。 我的代码:


我错过什么了吗?谢谢你抽出时间

您正在将加密jar的url添加到URLClassLoader。您希望URLClassLoader在加载jar时如何解密它


最好的办法是实现一个自定义类加载器。扩展SecureClassLoader并实现相关方法。javadocs中有一个基本示例。

您正在将加密jar的url添加到URLClassLoader中。您希望URLClassLoader在加载jar时如何解密它


最好的办法是实现一个自定义类加载器。扩展SecureClassLoader并实现相关方法。javadocs中有一个基本示例。

哇,我刚刚注意到了这一点。有什么方法可以循环通过jarinputstream并将类加载到内存中吗?哇,我刚刚注意到了这一点。是否有任何方法可以循环通过jarinputstream,并将类加载到内存中?
public static void main(String args[]) throws Exception {

String jar = "http://site.com/api/rsc/test.jar";
List<URL> urls = new ArrayList<URL>();
urls.add(getURL(jar));
URL jarurl = urls.get(0);

ObjectInputStream ois = new ObjectInputStream((new URL("http://site.com/api/rsc/key_1.txt").openStream()));
Object o = ois.readObject();
DESKeySpec ks = new DESKeySpec((byte[])o);
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
SecretKey key = skf.generateSecret(ks);

Cipher c = Cipher.getInstance("DES/CFB8/NoPadding");
c.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec((byte[]) ois.readObject()));
CipherInputStream cis = new CipherInputStream((jarurl.openStream()), c);

JarInputStream jis = new JarInputStream(cis);
String main = jis.getManifest().getMainAttributes().getValue("Main-Class");
String classpaths[] = jis.getManifest().getMainAttributes().getValue("Class-Path").split(" ");

for (String classpath: classpaths) {
    urls.add(getURL(classpath));
}

URLClassLoader loader = new URLClassLoader(urls.toArray(new URL[0]));
Class<?> cls = loader.loadClass(main);
Thread.currentThread().setContextClassLoader(loader);
Method m = cls.getMethod("main", new Class[]{new String[0].getClass()});
m.invoke(null, new Object[]{args});
Exception in thread "main" java.lang.ClassNotFoundException: helloworld.Main
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at jarloader.JarLoader.main(JarLoader.java:63)