Cel
Zbuduj aplikację desktopową do szyfrowania/odszyfrowywania danych, która umożliwi dynamiczne ładowanie algorytmów szyfrujących z zewnętrznych JAR-ów.
Wymagania
-
Interfejs wtyczek:
Zdefiniuj interfejs (np. EncryptionPlugin
), który zawiera m.in. metody
byte[] encrypt(byte[] data)
byte[] decrypt(byte[] data)
,
String getName()
-
Aplikacja główna (host):
- GUI (JavaFX/Swing) umożliwiające wczytanie wtyczek (pliki JAR), wybór algorytmu szyfrowania z listy oraz uruchomienie szyfrowania/odszyfrowywania na podanych danych (tekst lub plik).
- Refleksja: skanowanie klas wewnątrz JAR-a, sprawdzanie, czy implementują
EncryptionPlugin
, tworzenie instancji i wywoływanie metod.
- Dynamiczne ładowanie: użyj
URLClassLoader
(lub podobnego mechanizmu) do dołączania nowego kodu w trakcie działania aplikacji.
-
Przykładowe wtyczki:
- Minimum dwie proste implementacje w osobnych JAR-ach (np.
SimpleCaesarCipher
i AdvancedAESEncryption
).
- Każdy projekt pluginu powinien definiować klasę implementującą
EncryptionPlugin
.
Materiały do dostarczenia
- Kod źródłowy aplikacji hosta (z GUI i mechanizmem ładowania).
- Przykładowe wtyczki w postaci JAR-ów (np.
SimpleCaesarCipher.jar
, AdvancedAESEncryption.jar
).
- Instrukcja (README) zawierająca:
- Jak uruchomić aplikację.
- Jak dołączyć nowe wtyczki.
- Krótki opis, jak działania rozwiązania
- (Opcjonalnie) krótka prezentacja wideo pokazująca działanie.
Mechanika działania
- Wykorzystanie mechanizmów refleksji (wyszukiwanie klas, sprawdzanie interfejsów, tworzenie obiektów w locie).
- Przećwiczenie dynamicznego ładowania klas w Javie