Frostman's blog

Blog about programming and techs

JC13 - Lecture 03. Class Loaders

Mirantis Java Сourse 2013 (back)

Lecture 03. Class Loaders

Java Class Loaders

Практическое задание (на занятии) #1 / Домашнее задание

Необходимо реализовать класс EncryptedClassesClassLoader.

Класс-ключ: http://f.slukjanov.name/jc13/03/ru/sgu/itcourses/Key.class Зашифрованный класс: http://f.slukjanov.name/jc13/03/ru/sgu/itcourses/Secret.class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.net.MalformedURLException;
import java.net.URL;

public class Main {

    public static final String CLASSES_URL = "http://f.slukjanov.name/jc13/03/";

    public static void main(String[] args) throws MalformedURLException, ClassNotFoundException, IllegalAccessException,
            InstantiationException {
        EncryptedClassesClassLoader noEncryptClassLoader = new EncryptedClassesClassLoader(new URL(CLASSES_URL));
        Class<?> secretKeyClass = noEncryptClassLoader.loadClass("ru.sgu.itcourses.Key");
        Object secretKeyInstance = secretKeyClass.newInstance();
        String secretKey = secretKeyInstance.toString();
        System.out.println("secretKey=" + secretKey);

        EncryptedClassesClassLoader encryptedClassesClassLoader = new EncryptedClassesClassLoader(new URL(CLASSES_URL),
                secretKey);
        Class<?> secretClass = encryptedClassesClassLoader.loadClass("ru.sgu.itcourses.Secret");
        Object secretInstance = secretClass.newInstance();
        System.out.println("secretMessage=" + secretInstance.toString());
    }
}

Функция шифрования/дешифрования:

1
2
3
4
5
6
7
8
byte[] cryptBytes(byte[] bytes, String key) {
        byte[] decryptedBytes = new byte[bytes.length];
        for (int i = 0; i < bytes.length; i++) {
            byte x = (byte) (key.charAt(i % key.length()) - 'a');
            decryptedBytes[i] = (byte) (bytes[i] ^ x);
        }
        return decryptedBytes;
    }