Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Java - Jak jednoduše ověřit správnost hesla u archivu?

Dobrý den,

Ryze pro příklad jsem vytvořil tento kód

var filechooser = new FileChooser();
filechooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("zipfile", "*.zip"));
var archive = filechooser.showOpenDialog(null);
try {
    if (new ZipFile(archive).isEncrypted()) {
        System.out.println(correctPassword(archive, "cat.666"));
        System.out.println(correctPassword(archive, "cat_666"));
    } else {
        System.out.println("Without password");
    }
} catch (ZipException ex) {
}

public static String correctPassword(File archive, String password) {
    try {
        var fileHeaders = new ZipFile(archive).getFileHeaders();
        var smallest_size = fileHeaders.stream().map(f -> f.getComssedSize()).min(Long::compare).get();
        var smallest_file = fileHeaders.stream().filter(f -> f.getCompressedSize() == smallest_size).findFirst().get();
        new ZipFile(archive, password.toCharArray()).extractFile(smallest_file, "/tmp_directory");
        FileUtils.deleteDirectory(new File("C:/tmp_directory"));
    } catch (ZipException ex) {
        return password + " is not correct";
    } catch (IOException ex) {
        System.out.println("bad path");
    }
    return password + " is correct";
}

Sice to funguje, ale jsou tam dva základní problémy

1. Abych ověřil správnost hesla (pomocí knihovny zip4j), musím to extrahovat. Sice jsem to zjednodušil tak, aby extrahoval pouze jeden soubor a dokonce ten nejmenší, avšak jeho výběr je zbytečně složitý.

2. Smazání celé složky s extrahovaným souborem provádím pomocí knihovny Commons IO. Problém je, že je tam absolutní cesta a ještě musím v případě přejmenování složky to upravit na dvou místech.

Jak to, prosím Vás, zjednoduším?

Děkuji

PS. Čistě pro testování jsem vytvořil zip archiv se třemi soubory s heslem cat_666

Odpověď na otázku

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny