├── SECURITY.md ├── CODE_OF_CONDUCT.md ├── images ├── large.png ├── large2.png ├── small.png ├── small2.png ├── preview.png ├── socialpreview.png └── socialpreview2.png ├── project ├── doc │ └── doc.zip ├── project.jar ├── bin │ └── org │ │ ├── Main.class │ │ └── app │ │ ├── App.class │ │ ├── windows │ │ ├── WinManager.class │ │ └── dependencies │ │ │ ├── components │ │ │ ├── WinHome.class │ │ │ ├── WinHome$1.class │ │ │ ├── WinHome$2.class │ │ │ ├── WinHome$1$1.class │ │ │ ├── primality │ │ │ │ ├── WinPrimality.class │ │ │ │ ├── panels │ │ │ │ │ ├── WinInPrimality.class │ │ │ │ │ ├── WinOutPrimality.class │ │ │ │ │ ├── WinInPrimality$1.class │ │ │ │ │ ├── WinInPrimality$2.class │ │ │ │ │ ├── WinInPrimality$3.class │ │ │ │ │ ├── WinOutPrimality$1.class │ │ │ │ │ ├── WinOutPrimality$2.class │ │ │ │ │ ├── WinOutPrimality$3.class │ │ │ │ │ ├── WinOutPrimality$4.class │ │ │ │ │ └── WinSavePrimality.class │ │ │ │ └── dialogs │ │ │ │ │ ├── WinErrorInPrimality.class │ │ │ │ │ ├── WinErrorInPrimality$1.class │ │ │ │ │ └── WinErrorOutPrimality.class │ │ │ └── encryption │ │ │ │ ├── WinEncryption.class │ │ │ │ ├── panels │ │ │ │ ├── WinInEncryption.class │ │ │ │ ├── WinOutEncryption.class │ │ │ │ ├── WinInEncryption$1.class │ │ │ │ ├── WinInEncryption$2.class │ │ │ │ ├── WinInEncryption$3.class │ │ │ │ ├── WinInEncryption$4.class │ │ │ │ ├── WinInEncryption$5.class │ │ │ │ ├── WinInEncryption$6.class │ │ │ │ └── WinSaveEncryption.class │ │ │ │ └── dialogs │ │ │ │ ├── WinErrorInEncryption.class │ │ │ │ ├── WinErrorInEncryption$1.class │ │ │ │ └── WinErrorOutEncryption.class │ │ │ └── managers │ │ │ ├── WinManagerPrimality.class │ │ │ └── WinManagerEncryption.class │ │ └── applications │ │ ├── encryption │ │ ├── ReadFile.class │ │ └── TestEncryption.class │ │ └── primality │ │ ├── SavePrimality.class │ │ └── TestPrimality.class ├── lib │ └── flatlaf-3.2.5.jar ├── README.md └── src │ └── org │ ├── Main.java │ └── app │ ├── applications │ ├── primality │ │ ├── SavePrimality.java │ │ └── TestPrimality.java │ └── encryption │ │ ├── TestEncryption.java │ │ └── ReadFile.java │ ├── windows │ ├── dependencies │ │ ├── components │ │ │ ├── encryption │ │ │ │ ├── panels │ │ │ │ │ ├── WinSaveEncryption.java │ │ │ │ │ ├── WinOutEncryption.java │ │ │ │ │ └── WinInEncryption.java │ │ │ │ ├── WinEncryption.java │ │ │ │ └── dialogs │ │ │ │ │ ├── WinErrorOutEncryption.java │ │ │ │ │ └── WinErrorInEncryption.java │ │ │ ├── primality │ │ │ │ ├── WinPrimality.java │ │ │ │ ├── dialogs │ │ │ │ │ ├── WinErrorOutPrimality.java │ │ │ │ │ └── WinErrorInPrimality.java │ │ │ │ └── panels │ │ │ │ │ ├── WinSavePrimality.java │ │ │ │ │ ├── WinInPrimality.java │ │ │ │ │ └── WinOutPrimality.java │ │ │ └── WinHome.java │ │ └── managers │ │ │ ├── WinManagerEncryption.java │ │ │ └── WinManagerPrimality.java │ └── WinManager.java │ └── App.java └── README.md /SECURITY.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /images/large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/images/large.png -------------------------------------------------------------------------------- /images/large2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/images/large2.png -------------------------------------------------------------------------------- /images/small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/images/small.png -------------------------------------------------------------------------------- /images/small2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/images/small2.png -------------------------------------------------------------------------------- /images/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/images/preview.png -------------------------------------------------------------------------------- /project/doc/doc.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/doc/doc.zip -------------------------------------------------------------------------------- /project/project.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/project.jar -------------------------------------------------------------------------------- /images/socialpreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/images/socialpreview.png -------------------------------------------------------------------------------- /images/socialpreview2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/images/socialpreview2.png -------------------------------------------------------------------------------- /project/bin/org/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/Main.class -------------------------------------------------------------------------------- /project/bin/org/app/App.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/App.class -------------------------------------------------------------------------------- /project/lib/flatlaf-3.2.5.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/lib/flatlaf-3.2.5.jar -------------------------------------------------------------------------------- /project/bin/org/app/windows/WinManager.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/WinManager.class -------------------------------------------------------------------------------- /project/bin/org/app/applications/encryption/ReadFile.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/applications/encryption/ReadFile.class -------------------------------------------------------------------------------- /project/bin/org/app/applications/primality/SavePrimality.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/applications/primality/SavePrimality.class -------------------------------------------------------------------------------- /project/bin/org/app/applications/primality/TestPrimality.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/applications/primality/TestPrimality.class -------------------------------------------------------------------------------- /project/bin/org/app/applications/encryption/TestEncryption.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/applications/encryption/TestEncryption.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/WinHome.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/WinHome.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/WinHome$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/WinHome$1.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/WinHome$2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/WinHome$2.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/WinHome$1$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/WinHome$1$1.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/managers/WinManagerPrimality.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/managers/WinManagerPrimality.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/managers/WinManagerEncryption.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/managers/WinManagerEncryption.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/primality/WinPrimality.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/primality/WinPrimality.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/encryption/WinEncryption.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/encryption/WinEncryption.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/primality/panels/WinInPrimality.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/primality/panels/WinInPrimality.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/primality/panels/WinOutPrimality.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/primality/panels/WinOutPrimality.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/encryption/panels/WinInEncryption.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/encryption/panels/WinInEncryption.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/encryption/panels/WinOutEncryption.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/encryption/panels/WinOutEncryption.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/primality/panels/WinInPrimality$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/primality/panels/WinInPrimality$1.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/primality/panels/WinInPrimality$2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/primality/panels/WinInPrimality$2.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/primality/panels/WinInPrimality$3.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/primality/panels/WinInPrimality$3.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/primality/panels/WinOutPrimality$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/primality/panels/WinOutPrimality$1.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/primality/panels/WinOutPrimality$2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/primality/panels/WinOutPrimality$2.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/primality/panels/WinOutPrimality$3.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/primality/panels/WinOutPrimality$3.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/primality/panels/WinOutPrimality$4.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/primality/panels/WinOutPrimality$4.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/primality/panels/WinSavePrimality.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/primality/panels/WinSavePrimality.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/encryption/panels/WinInEncryption$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/encryption/panels/WinInEncryption$1.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/encryption/panels/WinInEncryption$2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/encryption/panels/WinInEncryption$2.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/encryption/panels/WinInEncryption$3.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/encryption/panels/WinInEncryption$3.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/encryption/panels/WinInEncryption$4.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/encryption/panels/WinInEncryption$4.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/encryption/panels/WinInEncryption$5.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/encryption/panels/WinInEncryption$5.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/encryption/panels/WinInEncryption$6.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/encryption/panels/WinInEncryption$6.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/encryption/panels/WinSaveEncryption.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/encryption/panels/WinSaveEncryption.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/primality/dialogs/WinErrorInPrimality.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/primality/dialogs/WinErrorInPrimality.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/encryption/dialogs/WinErrorInEncryption.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/encryption/dialogs/WinErrorInEncryption.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/primality/dialogs/WinErrorInPrimality$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/primality/dialogs/WinErrorInPrimality$1.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/primality/dialogs/WinErrorOutPrimality.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/primality/dialogs/WinErrorOutPrimality.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/encryption/dialogs/WinErrorInEncryption$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/encryption/dialogs/WinErrorInEncryption$1.class -------------------------------------------------------------------------------- /project/bin/org/app/windows/dependencies/components/encryption/dialogs/WinErrorOutEncryption.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vittorioPiotti/FermatAndRSA-Java/HEAD/project/bin/org/app/windows/dependencies/components/encryption/dialogs/WinErrorOutEncryption.class -------------------------------------------------------------------------------- /project/README.md: -------------------------------------------------------------------------------- 1 | ## Getting Started 2 | 3 | Welcome to the VS Code Java world. Here is a guideline to help you get started to write Java code in Visual Studio Code. 4 | 5 | ## Folder Structure 6 | 7 | The workspace contains two folders by default, where: 8 | 9 | - `src`: the folder to maintain sources 10 | - `lib`: the folder to maintain dependencies 11 | 12 | Meanwhile, the compiled output files will be generated in the `bin` folder by default. 13 | 14 | > If you want to customize the folder structure, open `.vscode/settings.json` and update the related settings there. 15 | 16 | ## Dependency Management 17 | 18 | The `JAVA PROJECTS` view allows you to manage your dependencies. More details can be found [here](https://github.com/microsoft/vscode-java-dependency#manage-dependencies). 19 | -------------------------------------------------------------------------------- /project/src/org/Main.java: -------------------------------------------------------------------------------- 1 | /* 2 | Fermat And RSA v1.0.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/releases/tag/1.0.0) 3 | Copyright 2024 Vittorio Piotti 4 | Licensed under GPL-3.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/blob/main/LICENSE.md) 5 | */ 6 | 7 | /* 8 | FlatLaf v3.2.5 (https://github.com/JFormDesigner/FlatLaf/releases/tag/3.2.5) 9 | Copyright 2024 JFormDesigner GmbH 10 | Licensed under Apache License 2.0 (https://github.com/JFormDesigner/FlatLaf/blob/main/LICENSE) 11 | */ 12 | 13 | 14 | package org; 15 | 16 | import org.app.App; 17 | 18 | 19 | 20 | /** 21 | * Punto di ingresso per l'applicazione Java. 22 | *
23 | * Questa classe contiene il metodo {@code main} che avvia l'applicazione. L'applicazione implementa due principali funzionalità: 24 | *
31 | * La classe {@link App} è responsabile della gestione dell'interfaccia utente e della logica dell'applicazione, coordinando le operazioni di generazione dei numeri primi e di crittografia. Quando viene eseguita, crea una nuova istanza di {@link App}, avviando così l'intera applicazione. 32 | *
33 | * 34 | * @author Vittorio Piotti 35 | * @version 1.0 36 | * @since 16-10-2023 37 | */ 38 | public class Main { 39 | /** 40 | * Metodo principale che avvia l'applicazione. 41 | *42 | * Questo metodo è il punto di ingresso dell'applicazione. Crea una nuova istanza della classe {@link App}, che avvia il processo di generazione dei numeri primi e di crittografia RSA. 43 | *
44 | * 45 | * @param args Argomenti della riga di comando, non utilizzati in questa applicazione. 46 | */ 47 | public static void main(String[] args) { 48 | new App(); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /project/src/org/app/applications/primality/SavePrimality.java: -------------------------------------------------------------------------------- 1 | /* 2 | Fermat And RSA v1.0.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/releases/tag/1.0.0) 3 | Copyright 2024 Vittorio Piotti 4 | Licensed under GPL-3.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/blob/main/LICENSE.md) 5 | */ 6 | 7 | /* 8 | FlatLaf v3.2.5 (https://github.com/JFormDesigner/FlatLaf/releases/tag/3.2.5) 9 | Copyright 2024 JFormDesigner GmbH 10 | Licensed under Apache License 2.0 (https://github.com/JFormDesigner/FlatLaf/blob/main/LICENSE) 11 | */ 12 | 13 | package org.app.applications.primality; 14 | 15 | 16 | import java.io.FileWriter; 17 | import java.io.IOException; 18 | 19 | /** 20 | * La classe {@code SavePrimality} gestisce la scrittura di una lista di stringhe formattate su un file TSV (Tab-Separated Values). 21 | *22 | * Ogni volta che viene chiamato il metodo {@link #newFile()}, il file viene ricreato, ovvero viene eliminato il file esistente e ne viene creato uno nuovo con il contenuto fornito. 23 | *
24 | * 25 | * @author Vittorio Piotti 26 | * @version 1.0 27 | * @since 16-10-2023 28 | */ 29 | public class SavePrimality { 30 | 31 | /** 32 | * Contenuto formattato da scrivere nel file. 33 | * Questo campo contiene le stringhe che verranno scritte nel file TSV. 34 | */ 35 | private String content; 36 | 37 | /** 38 | * Percorso del file in cui salvare il contenuto. 39 | * Questo campo specifica il percorso completo del file in cui il contenuto sarà scritto. 40 | */ 41 | private String path; 42 | 43 | /** 44 | * Costruttore della classe {@code SavePrimality}. 45 | *46 | * Inizializza il contenuto e il percorso del file in cui il contenuto verrà salvato. 47 | *
48 | * 49 | * @param content Il contenuto formattato da scrivere nel file. 50 | * @param path Il percorso completo del file in cui salvare il contenuto. 51 | */ 52 | public SavePrimality(String content,String path) { 53 | this.content = content; 54 | this.path = path; 55 | } 56 | 57 | /** 58 | * Scrive il contenuto nel file specificato dal percorso. 59 | *60 | * Questo metodo elimina il file esistente e ne crea uno nuovo con il contenuto fornito. Se si verifica un'eccezione durante la scrittura, il metodo la gestisce silenziosamente senza interrompere l'esecuzione. 61 | *
62 | */ 63 | public void newFile() { 64 | 65 | try (FileWriter fileWriter = new FileWriter(path, false)) { 66 | fileWriter.write(content); 67 | } catch (IOException e) { 68 | return; 69 | } 70 | } 71 | 72 | } -------------------------------------------------------------------------------- /project/src/org/app/windows/dependencies/components/encryption/panels/WinSaveEncryption.java: -------------------------------------------------------------------------------- 1 | /* 2 | Fermat And RSA v1.0.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/releases/tag/1.0.0) 3 | Copyright 2024 Vittorio Piotti 4 | Licensed under GPL-3.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/blob/main/LICENSE.md) 5 | */ 6 | 7 | /* 8 | FlatLaf v3.2.5 (https://github.com/JFormDesigner/FlatLaf/releases/tag/3.2.5) 9 | Copyright 2024 JFormDesigner GmbH 10 | Licensed under Apache License 2.0 (https://github.com/JFormDesigner/FlatLaf/blob/main/LICENSE) 11 | */ 12 | 13 | package org.app.windows.dependencies.components.encryption.panels; 14 | 15 | import java.awt.FileDialog; 16 | 17 | import javax.swing.JDialog; 18 | 19 | 20 | /** 21 | * La classe WinSaveEncryption gestisce una finestra di dialogo per salvare file, con funzionalità 22 | * aggiuntive per rilevare eventuali errori e richiamare una finestra di avviso in caso di problemi. 23 | * @author Vittorio Piotti 24 | * @version 1.0 25 | * @since 16-10-2023 26 | */ 27 | public class WinSaveEncryption { 28 | 29 | /** 30 | * Dialog per visualizzare la finestra di selezione file. 31 | */ 32 | private final JDialog dialog = new JDialog(); 33 | 34 | /** 35 | * Finestra di dialogo nativa per l'apertura di file. 36 | */ 37 | private final FileDialog fileDialog = new FileDialog(dialog, "Apri File", FileDialog.LOAD); 38 | 39 | /** 40 | * Percorso completo del file selezionato dall'utente. 41 | */ 42 | private String fullPath; 43 | 44 | /** 45 | * Runnable che gestisce l'apertura della finestra di errore se si verifica un problema. 46 | */ 47 | private Runnable openWindowErrorOutput; 48 | 49 | 50 | /** 51 | * Indica se si è verificato un errore nel processo di salvataggio o apertura file. 52 | */ 53 | private Boolean errorType; 54 | 55 | /** 56 | * Costruttore della classe WinSaveEncryption. 57 | * Inizializza la finestra di dialogo e la mostra all'utente. 58 | * 59 | * @param openWindowErrorOutput Runnable per eseguire l'azione quando si verifica un errore. 60 | */ 61 | public WinSaveEncryption(Runnable openWindowErrorOutput) { 62 | this.openWindowErrorOutput = openWindowErrorOutput; 63 | fileDialog.setVisible(true); 64 | } 65 | 66 | 67 | /** 68 | * Inizializza la finestra di selezione file e gestisce il percorso selezionato dall'utente. 69 | * Se il percorso è valido, richiama la finestra di errore. 70 | */ 71 | public void initWindow() { 72 | String selectedDirectory = fileDialog.getDirectory(); 73 | String selectedFile = fileDialog.getFile(); 74 | if (selectedDirectory != null && selectedFile != null) { 75 | fullPath = selectedDirectory + selectedFile; 76 | openWindowErrorOutput.run(); 77 | } 78 | } 79 | 80 | /** 81 | * Resetta il percorso del file selezionato, impostandolo a null. 82 | */ 83 | public void resetPath( ) { 84 | fullPath = null; 85 | } 86 | 87 | /** 88 | * Restituisce il percorso completo del file selezionato. 89 | * 90 | * @return Una stringa rappresentante il percorso completo del file. 91 | */ 92 | public String getPath() { 93 | return fullPath; 94 | } 95 | 96 | /** 97 | * Imposta lo stato di errore dell'operazione di salvataggio. 98 | * 99 | * @param state Un booleano che indica se c'è stato un errore (true) o meno (false). 100 | */ 101 | public void setErrorType(boolean state) { 102 | errorType = state; 103 | } 104 | 105 | /** 106 | * Restituisce lo stato di errore corrente. 107 | * 108 | * @return Un booleano che indica se c'è un errore (true) o meno (false). 109 | */ 110 | public boolean getErrorType() { 111 | return errorType; 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /project/src/org/app/windows/dependencies/components/encryption/WinEncryption.java: -------------------------------------------------------------------------------- 1 | /* 2 | Fermat And RSA v1.0.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/releases/tag/1.0.0) 3 | Copyright 2024 Vittorio Piotti 4 | Licensed under GPL-3.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/blob/main/LICENSE.md) 5 | */ 6 | 7 | /* 8 | FlatLaf v3.2.5 (https://github.com/JFormDesigner/FlatLaf/releases/tag/3.2.5) 9 | Copyright 2024 JFormDesigner GmbH 10 | Licensed under Apache License 2.0 (https://github.com/JFormDesigner/FlatLaf/blob/main/LICENSE) 11 | */ 12 | 13 | package org.app.windows.dependencies.components.encryption; 14 | 15 | import java.awt.BorderLayout; 16 | import java.awt.Dimension; 17 | import java.awt.GridBagConstraints; 18 | import java.awt.GridBagLayout; 19 | import java.awt.GridLayout; 20 | 21 | import javax.swing.JPanel; 22 | 23 | 24 | /** 25 | * La classe WinEncryption gestisce la finestra principale dell'applicazione con un layout diviso in due pannelli: 26 | * uno per l'input e uno per l'output. 27 | * @author Vittorio Piotti 28 | * @version 1.0 29 | * @since 16-10-2023 30 | */ 31 | public class WinEncryption{ 32 | 33 | /** 34 | * Pannello principale che contiene i due pannelli input e output disposti con un layout a griglia. 35 | */ 36 | private final JPanel gridPanel = new JPanel(new GridLayout(1, 2)); 37 | 38 | /** 39 | * Pannello per l'input, che contiene altri componenti per inserire i dati. 40 | */ 41 | private final JPanel panelInput = new JPanel(); 42 | 43 | /** 44 | * Pannello per l'output, che contiene i risultati elaborati. 45 | */ 46 | private final JPanel panelOutput = new JPanel(); 47 | 48 | /** 49 | * Pannello principale che utilizza un BorderLayout per gestire la disposizione dei pannelli. 50 | */ 51 | private final JPanel mainPanel = new JPanel(new BorderLayout()); 52 | 53 | /** 54 | * Oggetto GridBagConstraints usato per posizionare i componenti all'interno dei pannelli centrati. 55 | */ 56 | private final GridBagConstraints gbc = new GridBagConstraints(); 57 | 58 | /** 59 | * Centra un pannello figlio all'interno del pannello genitore. 60 | * 61 | * @param parent Il pannello genitore in cui centrare il pannello figlio. 62 | * @param child Il pannello figlio da centrare. 63 | */ 64 | private void centerChildInParent(JPanel parent, JPanel child){ 65 | parent.setLayout(new GridBagLayout()); 66 | gbc.gridx = 0; 67 | gbc.gridy = 0; 68 | parent.add(child, gbc); 69 | } 70 | 71 | /** 72 | * Imposta il layout del pannello griglia con un numero specifico di righe e colonne. 73 | * 74 | * @param rows Numero di righe del layout a griglia. 75 | * @param cols Numero di colonne del layout a griglia. 76 | */ 77 | public void setGridPanel(int rows, int cols){ 78 | gridPanel.setLayout(new GridLayout(rows, cols)); 79 | 80 | } 81 | 82 | /** 83 | * Restituisce il pannello principale che rappresenta la finestra dell'applicazione. 84 | * 85 | * @return Un oggetto JPanel che rappresenta la finestra principale. 86 | */ 87 | public JPanel getWindow(){ 88 | return mainPanel; 89 | } 90 | 91 | /** 92 | * Costruttore della classe WinEncryption. 93 | * Inizializza i pannelli input e output, li centra e li aggiunge al pannello principale. 94 | * 95 | * @param panelInput Il pannello che contiene i componenti di input. 96 | * @param panelOutput Il pannello che contiene i componenti di output. 97 | */ 98 | public WinEncryption(JPanel panelInput,JPanel panelOutput) { 99 | panelOutput.setPreferredSize(new Dimension(476, 214)); 100 | panelInput.setPreferredSize(new Dimension(476, 214)); 101 | 102 | centerChildInParent(this.panelInput,panelInput); 103 | centerChildInParent(this.panelOutput,panelOutput); 104 | gridPanel.add(this.panelInput); 105 | gridPanel.add(this.panelOutput); 106 | mainPanel.add(gridPanel, BorderLayout.CENTER); 107 | 108 | } 109 | 110 | 111 | } -------------------------------------------------------------------------------- /project/src/org/app/windows/dependencies/components/primality/WinPrimality.java: -------------------------------------------------------------------------------- 1 | /* 2 | Fermat And RSA v1.0.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/releases/tag/1.0.0) 3 | Copyright 2024 Vittorio Piotti 4 | Licensed under GPL-3.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/blob/main/LICENSE.md) 5 | */ 6 | 7 | /* 8 | FlatLaf v3.2.5 (https://github.com/JFormDesigner/FlatLaf/releases/tag/3.2.5) 9 | Copyright 2024 JFormDesigner GmbH 10 | Licensed under Apache License 2.0 (https://github.com/JFormDesigner/FlatLaf/blob/main/LICENSE) 11 | */ 12 | 13 | package org.app.windows.dependencies.components.primality; 14 | 15 | import java.awt.BorderLayout; 16 | import java.awt.Dimension; 17 | import java.awt.GridBagConstraints; 18 | import java.awt.GridBagLayout; 19 | import java.awt.GridLayout; 20 | 21 | import javax.swing.JPanel; 22 | 23 | 24 | /** 25 | * Classe che gestisce la finestra principale dell'applicazione per la visualizzazione e l'interazione 26 | * con i pannelli di input e output. 27 | * 28 | * La classe dispone di un layout a griglia per disporre i pannelli di input e output e un layout 29 | * principale per gestire l'interfaccia utente dell'applicazione. 30 | * @author Vittorio Piotti 31 | * @version 1.0 32 | * @since 16-10-2023 33 | */ 34 | public class WinPrimality { 35 | 36 | /** 37 | * Il pannello che contiene i pannelli di input e output disposti in griglia. 38 | */ 39 | private final JPanel gridPanel = new JPanel(new GridLayout(1, 2)); 40 | 41 | /** 42 | * Il pannello per l'input dell'utente. 43 | */ 44 | private final JPanel panelInput = new JPanel(); 45 | 46 | /** 47 | * Il pannello per l'output dei risultati. 48 | */ 49 | private final JPanel panelOutput = new JPanel(); 50 | 51 | /** 52 | * Il pannello principale che contiene il pannello a griglia. 53 | */ 54 | private final JPanel mainPanel = new JPanel(new BorderLayout()); 55 | 56 | /** 57 | * I vincoli di layout per la disposizione dei componenti nel pannello. 58 | */ 59 | private final GridBagConstraints gbc = new GridBagConstraints(); 60 | 61 | /** 62 | * Allinea un pannello figlio al centro di un pannello genitore utilizzando un layout GridBagLayout. 63 | * 64 | * @param parent Il pannello genitore in cui il pannello figlio deve essere centrato. 65 | * @param child Il pannello figlio da centrare nel pannello genitore. 66 | */ 67 | private void centerChildInParent(JPanel parent, JPanel child){ 68 | parent.setLayout(new GridBagLayout()); 69 | gbc.gridx = 0; 70 | gbc.gridy = 0; 71 | parent.add(child, gbc); 72 | } 73 | 74 | /** 75 | * Imposta il layout a griglia per il pannello principale che contiene i pannelli di input e output. 76 | * 77 | * @param rows Il numero di righe nella griglia. 78 | * @param cols Il numero di colonne nella griglia. 79 | */ 80 | public void setGridPanel(int rows, int cols){ 81 | gridPanel.setLayout(new GridLayout(rows, cols)); 82 | 83 | } 84 | /** 85 | * Restituisce il pannello principale della finestra. 86 | * 87 | * @return Il pannello principale. 88 | */ 89 | public JPanel getWindow(){ 90 | return mainPanel; 91 | } 92 | 93 | /** 94 | * Costruisce una nuova istanza della finestra principale. 95 | * Inizializza i pannelli di input e output, li posiziona nella griglia e aggiunge la griglia al pannello principale. 96 | * 97 | * @param panelInput Il pannello per l'input dell'utente. 98 | * @param panelOutput Il pannello per l'output dei risultati. 99 | */ 100 | public WinPrimality(JPanel panelInput,JPanel panelOutput) { 101 | panelOutput.setPreferredSize(new Dimension(476, 214)); 102 | panelInput.setPreferredSize(new Dimension(476, 214)); 103 | 104 | centerChildInParent(this.panelInput,panelInput); 105 | centerChildInParent(this.panelOutput,panelOutput); 106 | gridPanel.add(this.panelInput); 107 | gridPanel.add(this.panelOutput); 108 | mainPanel.add(gridPanel, BorderLayout.CENTER); 109 | 110 | } 111 | 112 | 113 | } -------------------------------------------------------------------------------- /project/src/org/app/windows/dependencies/components/encryption/dialogs/WinErrorOutEncryption.java: -------------------------------------------------------------------------------- 1 | /* 2 | Fermat And RSA v1.0.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/releases/tag/1.0.0) 3 | Copyright 2024 Vittorio Piotti 4 | Licensed under GPL-3.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/blob/main/LICENSE.md) 5 | */ 6 | 7 | /* 8 | FlatLaf v3.2.5 (https://github.com/JFormDesigner/FlatLaf/releases/tag/3.2.5) 9 | Copyright 2024 JFormDesigner GmbH 10 | Licensed under Apache License 2.0 (https://github.com/JFormDesigner/FlatLaf/blob/main/LICENSE) 11 | */ 12 | 13 | package org.app.windows.dependencies.components.encryption.dialogs; 14 | 15 | import java.awt.BorderLayout; 16 | import java.awt.FlowLayout; 17 | 18 | import javax.swing.Box; 19 | import javax.swing.Icon; 20 | import javax.swing.JButton; 21 | import javax.swing.JDialog; 22 | import javax.swing.JFrame; 23 | import javax.swing.JLabel; 24 | import javax.swing.JPanel; 25 | import javax.swing.UIManager; 26 | import javax.swing.border.EmptyBorder; 27 | 28 | /** 29 | * Classe che rappresenta una finestra di dialogo per visualizzare un messaggio di successo o errore 30 | * durante l'operazione di crittografia o decrittografia. La finestra può mostrare un'icona e un 31 | * messaggio personalizzati a seconda dello stato passato. 32 | * @author Vittorio Piotti 33 | * @version 1.0 34 | * @since 16-10-2023 35 | */ 36 | public class WinErrorOutEncryption { 37 | 38 | /** Finestra di dialogo per visualizzare l'errore o il successo. */ 39 | private final JDialog dialog = new JDialog(); 40 | 41 | /** Etichetta per mostrare l'icona (di errore o informazione). */ 42 | private final JLabel iconLabel = new JLabel(); 43 | 44 | /** Pannello per contenere il messaggio da visualizzare. */ 45 | private final JPanel messagePanel = new JPanel(); 46 | 47 | /** Etichetta per mostrare il messaggio principale. */ 48 | private final JLabel messageLabel = new JLabel(); 49 | 50 | /** Pannello per contenere il pulsante di chiusura. */ 51 | private final JPanel buttonPanel = new JPanel(); 52 | 53 | /** Pulsante per chiudere la finestra di dialogo. */ 54 | private final JButton button = new JButton("OK"); 55 | 56 | /** Icona di avviso (per segnalare un errore). */ 57 | private final Icon alertIcon = UIManager.getIcon("OptionPane.informationIcon"); 58 | 59 | /** Icona di errore (per segnalare un errore grave). */ 60 | private final Icon errorIcon = UIManager.getIcon("OptionPane.warningIcon"); 61 | 62 | /** 63 | * Costruttore per creare e visualizzare una finestra di dialogo con un messaggio di errore o successo. 64 | * 65 | * @param mainFrame Il frame principale a cui la finestra di dialogo è relativa. 66 | * @param state Se false, la finestra mostra un messaggio di errore; se true, mostra un messaggio di successo. 67 | */ 68 | public WinErrorOutEncryption(JFrame mainFrame,boolean state){ 69 | dialog.setTitle((state == false)?"Errore":"Successo"); 70 | dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 71 | dialog.setSize(300, 180); 72 | dialog.setResizable(false); 73 | dialog.setLayout(new BorderLayout()); 74 | dialog.setLocationRelativeTo(mainFrame); 75 | iconLabel.setIcon((state == false)?errorIcon:alertIcon); 76 | iconLabel.setBorder(new EmptyBorder(20, 20, 0, 20)); 77 | dialog.add(iconLabel, BorderLayout.WEST); 78 | messagePanel.setBorder(new EmptyBorder(20, 0, 0,20)); 79 | messagePanel.setLayout(new BorderLayout()); 80 | messageLabel.setText((state == false)?"Formato file non valido":"File selezionato"); 81 | messagePanel.add(messageLabel, BorderLayout.CENTER); 82 | dialog.add(messagePanel, BorderLayout.CENTER); 83 | buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT)); 84 | buttonPanel.setBorder(new EmptyBorder(0, 0, 20,20)); 85 | buttonPanel.add(Box.createVerticalGlue()); 86 | buttonPanel.add(button); 87 | buttonPanel.add(Box.createVerticalGlue()); 88 | dialog.add(buttonPanel, BorderLayout.SOUTH); 89 | button.addActionListener(e -> { 90 | dialog.dispose(); 91 | }); 92 | dialog.setVisible(true); 93 | } 94 | 95 | /** 96 | * Chiude la finestra di dialogo. 97 | */ 98 | public void dispose(){ 99 | dialog.dispose(); 100 | } 101 | 102 | } 103 | 104 | -------------------------------------------------------------------------------- /project/src/org/app/windows/dependencies/components/primality/dialogs/WinErrorOutPrimality.java: -------------------------------------------------------------------------------- 1 | /* 2 | Fermat And RSA v1.0.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/releases/tag/1.0.0) 3 | Copyright 2024 Vittorio Piotti 4 | Licensed under GPL-3.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/blob/main/LICENSE.md) 5 | */ 6 | 7 | /* 8 | FlatLaf v3.2.5 (https://github.com/JFormDesigner/FlatLaf/releases/tag/3.2.5) 9 | Copyright 2024 JFormDesigner GmbH 10 | Licensed under Apache License 2.0 (https://github.com/JFormDesigner/FlatLaf/blob/main/LICENSE) 11 | */ 12 | 13 | package org.app.windows.dependencies.components.primality.dialogs; 14 | import java.awt.BorderLayout; 15 | import java.awt.FlowLayout; 16 | 17 | import javax.swing.Box; 18 | import javax.swing.Icon; 19 | import javax.swing.JButton; 20 | import javax.swing.JDialog; 21 | import javax.swing.JFrame; 22 | import javax.swing.JLabel; 23 | import javax.swing.JPanel; 24 | import javax.swing.UIManager; 25 | import javax.swing.border.EmptyBorder; 26 | 27 | 28 | /** 29 | * La classe WinErrorOutPrimality gestisce una finestra di dialogo che mostra un messaggio di errore o successo per un'operazione di primalità. 30 | * A seconda dello stato fornito, la finestra visualizza un'icona di avviso o di informazione, e un messaggio appropriato. 31 | * @author Vittorio Piotti 32 | * @version 1.0 33 | * @since 16-10-2023 34 | */ 35 | public class WinErrorOutPrimality { 36 | 37 | /** 38 | * Finestra di dialogo principale. 39 | */ 40 | private final JDialog dialog = new JDialog(); 41 | 42 | /** 43 | * Etichetta che visualizza l'icona di errore o successo. 44 | */ 45 | private final JLabel iconLabel = new JLabel(); 46 | 47 | /** 48 | * Pannello che contiene il messaggio da visualizzare. 49 | */ 50 | private final JPanel messagePanel = new JPanel(); 51 | 52 | /** 53 | * Etichetta che visualizza il testo del messaggio. 54 | */ 55 | private final JLabel messageLabel = new JLabel(); 56 | 57 | /** 58 | * Pannello che contiene il bottone di conferma. 59 | */ 60 | private final JPanel buttonPanel = new JPanel(); 61 | 62 | /** 63 | * Bottone per chiudere la finestra di dialogo. 64 | */ 65 | private final JButton button = new JButton("OK"); 66 | 67 | /** 68 | * Icona per messaggi di successo. 69 | */ 70 | private final Icon alertIcon = UIManager.getIcon("OptionPane.informationIcon"); 71 | 72 | /** 73 | * Icona per messaggi di errore. 74 | */ 75 | private final Icon errorIcon = UIManager.getIcon("OptionPane.warningIcon"); 76 | 77 | 78 | /** 79 | * Costruttore della classe WinErrorOutPrimality. 80 | * Inizializza e configura la finestra di dialogo con icona e messaggio in base allo stato specificato. 81 | * 82 | * @param mainFrame Il frame principale su cui la finestra di dialogo è centrata. 83 | * @param state Un booleano che determina il tipo di messaggio: 84 | * {@code false} per errore (icona di avviso), 85 | * {@code true} per successo (icona di informazione). 86 | */ 87 | public WinErrorOutPrimality(JFrame mainFrame,boolean state){ 88 | dialog.setTitle((state == false)?"Errore":"Successo"); 89 | dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 90 | dialog.setSize(300, 180); 91 | dialog.setResizable(false); 92 | dialog.setLayout(new BorderLayout()); 93 | dialog.setLocationRelativeTo(mainFrame); 94 | iconLabel.setIcon((state == false)?errorIcon:alertIcon); 95 | iconLabel.setBorder(new EmptyBorder(20, 20, 0, 20)); 96 | dialog.add(iconLabel, BorderLayout.WEST); 97 | messagePanel.setBorder(new EmptyBorder(20, 0, 0,20)); 98 | messagePanel.setLayout(new BorderLayout()); 99 | messageLabel.setText((state == false)?"Accesso cartella vietato":"File salvato correttamente"); 100 | messagePanel.add(messageLabel, BorderLayout.CENTER); 101 | dialog.add(messagePanel, BorderLayout.CENTER); 102 | buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT)); 103 | buttonPanel.setBorder(new EmptyBorder(0, 0, 20,20)); 104 | buttonPanel.add(Box.createVerticalGlue()); 105 | buttonPanel.add(button); 106 | buttonPanel.add(Box.createVerticalGlue()); 107 | dialog.add(buttonPanel, BorderLayout.SOUTH); 108 | button.addActionListener(e -> { 109 | dialog.dispose(); 110 | }); 111 | dialog.setVisible(true); 112 | } 113 | 114 | /** 115 | * Chiude e libera le risorse della finestra di dialogo. 116 | */ 117 | public void dispose(){ 118 | dialog.dispose(); 119 | } 120 | 121 | } 122 | 123 | -------------------------------------------------------------------------------- /project/src/org/app/applications/encryption/TestEncryption.java: -------------------------------------------------------------------------------- 1 | /* 2 | Fermat And RSA v1.0.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/releases/tag/1.0.0) 3 | Copyright 2024 Vittorio Piotti 4 | Licensed under GPL-3.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/blob/main/LICENSE.md) 5 | */ 6 | 7 | /* 8 | FlatLaf v3.2.5 (https://github.com/JFormDesigner/FlatLaf/releases/tag/3.2.5) 9 | Copyright 2024 JFormDesigner GmbH 10 | Licensed under Apache License 2.0 (https://github.com/JFormDesigner/FlatLaf/blob/main/LICENSE) 11 | */ 12 | 13 | package org.app.applications.encryption; 14 | 15 | import java.math.BigInteger; 16 | 17 | /** 18 | * Classe che implementa la crittografia RSA semplice per cifrare e decifrare messaggi. 19 | * Fornisce un'opzione per calcolare la chiave privata (d) utilizzando il modulo inverso o 20 | * un metodo alternativo. 21 | * @author Vittorio Piotti 22 | * @version 1.0 23 | * @since 16-10-2023 24 | */ 25 | public class TestEncryption { 26 | 27 | /** Primo numero primo utilizzato per generare la chiave RSA. */ 28 | private BigInteger p; 29 | 30 | /** Secondo numero primo utilizzato per generare la chiave RSA. */ 31 | private BigInteger q; 32 | 33 | /** Esponente pubblico utilizzato per la crittografia. */ 34 | private BigInteger e; 35 | 36 | /** Modulo n utilizzato per la crittografia e la decrittografia. */ 37 | private BigInteger n; 38 | 39 | /** Esponente privato utilizzato per la decrittografia. */ 40 | private BigInteger d; 41 | 42 | /** 43 | * Costruttore per inizializzare i parametri RSA e calcolare la chiave privata (d). 44 | * 45 | * @param modInverse Se true, utilizza il metodo del modulo inverso per calcolare d, altrimenti utilizza un algoritmo alternativo. 46 | * @param p Primo numero primo come stringa. 47 | * @param q Secondo numero primo come stringa. 48 | * @param e Esponente pubblico come stringa. 49 | */ 50 | public TestEncryption(boolean modInverse,String p, String q, String e) { 51 | this.p = new BigInteger(p); 52 | this.q = new BigInteger(q); 53 | this.e = new BigInteger(e); 54 | this.n = this.p.multiply(this.q); 55 | BigInteger phi_n = this.p.subtract(BigInteger.ONE).multiply(this.q.subtract(BigInteger.ONE)); 56 | if(modInverse == true){ 57 | this.d = this.e.modInverse(phi_n); 58 | }else{ 59 | this.d = calculateD(this.e, phi_n); 60 | 61 | } 62 | 63 | } 64 | 65 | /** 66 | * Metodo privato per calcolare la chiave privata (d) senza utilizzare il modulo inverso. 67 | * 68 | * @param e Esponente pubblico. 69 | * @param phi_n Funzione di Eulero (φ(n)). 70 | * @return La chiave privata (d) calcolata. 71 | */ 72 | private BigInteger calculateD(BigInteger e, BigInteger phi_n) { 73 | BigInteger d = BigInteger.ZERO; 74 | BigInteger k = BigInteger.ONE; 75 | 76 | while (true) { 77 | BigInteger numerator = k.multiply(phi_n).add(BigInteger.ONE); 78 | if (numerator.mod(e).equals(BigInteger.ZERO)) { 79 | d = numerator.divide(e); 80 | break; 81 | } 82 | k = k.add(BigInteger.ONE); 83 | } 84 | 85 | return d; 86 | } 87 | 88 | /** 89 | * Cifra un messaggio di testo in chiaro utilizzando la chiave pubblica RSA. 90 | * 91 | * @param plaintext Il messaggio in chiaro da cifrare. 92 | * @return Il messaggio cifrato, rappresentato come una stringa di numeri separati da spazi. 93 | */ 94 | public String encrypt(String plaintext) { 95 | StringBuilder ciphertext = new StringBuilder(); 96 | for (char c : plaintext.toCharArray()) { 97 | BigInteger m = BigInteger.valueOf(c); 98 | BigInteger encrypted = m.modPow(e, n); 99 | ciphertext.append(encrypted).append(" "); 100 | } 101 | return ciphertext.toString().trim(); 102 | } 103 | 104 | /** 105 | * Decifra un messaggio cifrato utilizzando la chiave privata RSA. 106 | * 107 | * @param ciphertext Il messaggio cifrato da decifrare. 108 | * @return Il messaggio in chiaro decifrato. 109 | */ 110 | public String decrypt(String ciphertext) { 111 | StringBuilder plaintext = new StringBuilder(); 112 | for (String token : ciphertext.split(" ")) { 113 | BigInteger encrypted = new BigInteger(token); 114 | BigInteger decrypted = encrypted.modPow(d, n); 115 | plaintext.append((char) decrypted.intValue()); 116 | } 117 | return plaintext.toString(); 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /project/src/org/app/windows/dependencies/components/primality/panels/WinSavePrimality.java: -------------------------------------------------------------------------------- 1 | /* 2 | Fermat And RSA v1.0.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/releases/tag/1.0.0) 3 | Copyright 2024 Vittorio Piotti 4 | Licensed under GPL-3.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/blob/main/LICENSE.md) 5 | */ 6 | 7 | /* 8 | FlatLaf v3.2.5 (https://github.com/JFormDesigner/FlatLaf/releases/tag/3.2.5) 9 | Copyright 2024 JFormDesigner GmbH 10 | Licensed under Apache License 2.0 (https://github.com/JFormDesigner/FlatLaf/blob/main/LICENSE) 11 | */ 12 | 13 | package org.app.windows.dependencies.components.primality.panels; 14 | 15 | import java.awt.FileDialog; 16 | import java.io.File; 17 | 18 | import javax.swing.JDialog; 19 | 20 | 21 | /** 22 | * Gestisce la finestra di salvataggio per i risultati del calcolo di primalità. 23 | * Permette all'utente di scegliere un percorso e un nome di file per salvare i dati. 24 | * Controlla anche se il percorso di salvataggio è all'interno di una directory bloccata 25 | * e gestisce gli errori associati. 26 | * @author Vittorio Piotti 27 | * @version 1.0 28 | * @since 16-10-2023 29 | */ 30 | public class WinSavePrimality { 31 | 32 | /** 33 | * La finestra di dialogo principale per la selezione del file. 34 | */ 35 | private final JDialog dialog = new JDialog(); 36 | 37 | /** 38 | * La finestra di dialogo per la selezione e il salvataggio del file. 39 | */ 40 | private final FileDialog fileDialog = new FileDialog(dialog, "Salva File", FileDialog.SAVE); 41 | 42 | /** 43 | * Il percorso del file JAR in cui è eseguita l'applicazione. 44 | */ 45 | private final String jarFilePath = WinSavePrimality.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 46 | 47 | /** 48 | * Il percorso della cartella Desktop dell'utente. 49 | */ 50 | private final String desktopPath = System.getProperty("user.home") + System.getProperty("file.separator") + "Desktop"; 51 | 52 | /** 53 | * Il percorso della directory da cui il salvataggio è bloccato, se applicabile. 54 | */ 55 | private String directoryToBlock = (jarFilePath.toLowerCase().endsWith(".jar") ? new File(jarFilePath).getParent() : System.getProperty("user.dir")); 56 | 57 | /** 58 | * Il percorso completo del file selezionato per il salvataggio. 59 | */ 60 | private String fullPath; 61 | 62 | /** 63 | * Il runnable da eseguire in caso di errore nel percorso di salvataggio. 64 | */ 65 | private Runnable openWindowErrorOutput; 66 | 67 | /** 68 | * Indica se si è verificato un errore relativo al percorso di salvataggio. 69 | */ 70 | private Boolean errorType; 71 | 72 | 73 | /** 74 | * Costruisce una finestra di salvataggio con il nome di file predefinito e 75 | * il runnable per gestire gli errori di percorso di salvataggio. 76 | * 77 | * @param fileName Il nome del file predefinito per il salvataggio. 78 | * @param openWindowErrorOutput Il runnable da eseguire in caso di errore nel percorso di salvataggio. 79 | */ 80 | public WinSavePrimality(String fileName,Runnable openWindowErrorOutput) { 81 | if (!directoryToBlock.equals(File.separator)) { 82 | directoryToBlock = new File(directoryToBlock).getParent(); 83 | } 84 | this.openWindowErrorOutput = openWindowErrorOutput; 85 | fileDialog.setDirectory(desktopPath); 86 | fileDialog.setFile(fileName); 87 | fileDialog.setVisible(true); 88 | } 89 | 90 | /** 91 | * Inizializza la finestra di salvataggio e verifica il percorso selezionato. 92 | * Controlla se il percorso di salvataggio è all'interno della directory bloccata. 93 | * Esegue il runnable associato in caso di errore di percorso. 94 | */ 95 | public void initWindow(){ 96 | String selectedDirectory = fileDialog.getDirectory(); 97 | String selectedFile = fileDialog.getFile(); 98 | if (selectedDirectory != null && selectedFile != null) { 99 | if (!selectedFile.endsWith(".txt")) { 100 | selectedFile += ".txt"; 101 | } 102 | fullPath = selectedDirectory + selectedFile; 103 | if (fullPath.startsWith(directoryToBlock)) { 104 | errorType = false; 105 | } else { 106 | errorType = true; 107 | } 108 | openWindowErrorOutput.run(); 109 | } 110 | } 111 | 112 | /** 113 | * Restituisce il percorso completo del file selezionato per il salvataggio. 114 | * 115 | * @return Il percorso completo del file. 116 | */ 117 | public String getPath(){ 118 | return fullPath; 119 | } 120 | 121 | /** 122 | * Restituisce il tipo di errore associato al percorso di salvataggio. 123 | * 124 | * @return {@code true} se il percorso di salvataggio è al di fuori della directory bloccata, {@code false} altrimenti. 125 | */ 126 | public boolean getErrorType(){ 127 | return errorType; 128 | } 129 | 130 | 131 | } 132 | -------------------------------------------------------------------------------- /project/src/org/app/windows/dependencies/components/primality/dialogs/WinErrorInPrimality.java: -------------------------------------------------------------------------------- 1 | /* 2 | Fermat And RSA v1.0.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/releases/tag/1.0.0) 3 | Copyright 2024 Vittorio Piotti 4 | Licensed under GPL-3.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/blob/main/LICENSE.md) 5 | */ 6 | 7 | /* 8 | FlatLaf v3.2.5 (https://github.com/JFormDesigner/FlatLaf/releases/tag/3.2.5) 9 | Copyright 2024 JFormDesigner GmbH 10 | Licensed under Apache License 2.0 (https://github.com/JFormDesigner/FlatLaf/blob/main/LICENSE) 11 | */ 12 | 13 | package org.app.windows.dependencies.components.primality.dialogs; 14 | 15 | 16 | import java.awt.BorderLayout; 17 | import java.awt.Color; 18 | import java.awt.Dimension; 19 | import java.awt.Font; 20 | import java.awt.GridBagConstraints; 21 | import java.awt.GridBagLayout; 22 | import java.awt.Insets; 23 | import java.awt.event.ActionEvent; 24 | import java.awt.event.ActionListener; 25 | 26 | import javax.swing.BorderFactory; 27 | import javax.swing.JButton; 28 | import javax.swing.JDialog; 29 | import javax.swing.JFrame; 30 | import javax.swing.JLabel; 31 | import javax.swing.JPanel; 32 | 33 | /** 34 | * La classe WinErrorInPrimality rappresenta una finestra di dialogo che mostra un errore di inserimento relativo alla primalità. 35 | * Viene visualizzato un messaggio di errore con la possibilità di chiudere la finestra. 36 | * @author Vittorio Piotti 37 | * @version 1.0 38 | * @since 16-10-2023 39 | */ 40 | public class WinErrorInPrimality { 41 | 42 | /** 43 | * Dialogo principale che ospita la finestra di errore. 44 | */ 45 | private final JDialog dialog = new JDialog(); 46 | 47 | /** 48 | * Pannello principale che contiene tutti i componenti della finestra. 49 | */ 50 | private final JPanel mainPanel = new JPanel(new GridBagLayout()); 51 | 52 | /** 53 | * Gestisce la disposizione dei componenti nel pannello con le relative restrizioni. 54 | */ 55 | private final GridBagConstraints gbc = new GridBagConstraints(); 56 | 57 | /** 58 | * Etichetta che mostra il titolo del messaggio di errore. 59 | */ 60 | private final JLabel label = new JLabel("Errore inserimento"); 61 | 62 | /** 63 | * Pannello orizzontale che funge da separatore. 64 | */ 65 | private final JPanel hr = new JPanel(new BorderLayout()); 66 | 67 | /** 68 | * Pannello orizzontale più piccolo per un effetto di separazione sottile. 69 | */ 70 | private final JPanel hr_small = new JPanel(new BorderLayout()); 71 | 72 | /** 73 | * Bottone per chiudere la finestra di dialogo. 74 | */ 75 | private final JButton closeButton = new JButton("Chiudi"); 76 | 77 | /** 78 | * Array di etichette che mostra i messaggi di errore. 79 | */ 80 | private JLabel[] errorMessages; 81 | 82 | 83 | /** 84 | * Costruttore della classe WinErrorInPrimality. 85 | * Inizializza e configura la finestra di dialogo per mostrare i messaggi di errore specificati. 86 | * 87 | * @param mainFrame Il frame principale su cui la finestra di dialogo è centrata. 88 | * @param errorMessages Un array di stringhe contenente i messaggi di errore da visualizzare. 89 | */ 90 | public WinErrorInPrimality(JFrame mainFrame,String[] errorMessages){ 91 | dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 92 | dialog.setResizable(false); 93 | gbc.insets = new Insets(10, 10, 10, 10); 94 | label.setHorizontalAlignment(JLabel.CENTER); 95 | label.setBorder(BorderFactory.createEmptyBorder(10, 20, 0, 20)); 96 | label.setFont(new Font(label.getFont().getFontName(), Font.BOLD, label.getFont().getSize())); 97 | gbc.gridy++; 98 | gbc.gridwidth = 0; 99 | gbc.anchor = GridBagConstraints.CENTER; 100 | mainPanel.add(label, gbc); 101 | gbc.gridy++; 102 | hr_small.setBackground(Color.BLACK); 103 | hr_small.setPreferredSize(new Dimension(15, 7)); 104 | mainPanel.add(hr_small, gbc); 105 | 106 | this.errorMessages = new JLabel[errorMessages.length]; 107 | for (int i = 0; i < errorMessages.length;i++) { 108 | this.errorMessages[i] = new JLabel(errorMessages[i]); 109 | gbc.gridy++; 110 | gbc.gridwidth = 0; 111 | gbc.anchor = GridBagConstraints.WEST; 112 | mainPanel.add(this.errorMessages[i], gbc); 113 | } 114 | 115 | hr.setBackground(Color.GRAY); 116 | hr.setPreferredSize(new Dimension(230, 1)); 117 | gbc.gridx = 0; 118 | gbc.gridwidth = 2; 119 | gbc.gridy++; 120 | gbc.anchor = GridBagConstraints.CENTER; 121 | mainPanel.add(hr, gbc); 122 | closeButton.addActionListener(new ActionListener() { 123 | public void actionPerformed(ActionEvent e) { 124 | dialog.dispose(); 125 | } 126 | }); 127 | gbc.gridx = 1; 128 | gbc.gridy++; 129 | gbc.gridwidth = 1; 130 | gbc.anchor = GridBagConstraints.EAST; 131 | mainPanel.add(closeButton, gbc); 132 | dialog.add(mainPanel); 133 | dialog.pack(); 134 | dialog.setLocationRelativeTo(mainFrame); 135 | dialog.setVisible(true); 136 | } 137 | 138 | /** 139 | * Chiude e libera le risorse della finestra di dialogo. 140 | */ 141 | public void dispose(){ 142 | dialog.dispose(); 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /project/src/org/app/windows/dependencies/components/encryption/dialogs/WinErrorInEncryption.java: -------------------------------------------------------------------------------- 1 | /* 2 | Fermat And RSA v1.0.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/releases/tag/1.0.0) 3 | Copyright 2024 Vittorio Piotti 4 | Licensed under GPL-3.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/blob/main/LICENSE.md) 5 | */ 6 | 7 | /* 8 | FlatLaf v3.2.5 (https://github.com/JFormDesigner/FlatLaf/releases/tag/3.2.5) 9 | Copyright 2024 JFormDesigner GmbH 10 | Licensed under Apache License 2.0 (https://github.com/JFormDesigner/FlatLaf/blob/main/LICENSE) 11 | */ 12 | 13 | package org.app.windows.dependencies.components.encryption.dialogs; 14 | 15 | 16 | import java.awt.BorderLayout; 17 | import java.awt.Color; 18 | import java.awt.Dimension; 19 | import java.awt.Font; 20 | import java.awt.GridBagConstraints; 21 | import java.awt.GridBagLayout; 22 | import java.awt.Insets; 23 | import java.awt.event.ActionEvent; 24 | import java.awt.event.ActionListener; 25 | 26 | import javax.swing.BorderFactory; 27 | import javax.swing.JButton; 28 | import javax.swing.JDialog; 29 | import javax.swing.JFrame; 30 | import javax.swing.JLabel; 31 | import javax.swing.JPanel; 32 | 33 | /** 34 | * Classe che rappresenta una finestra di dialogo per la visualizzazione di errori di inserimento durante la crittografia. 35 | * La finestra mostra un elenco di messaggi di errore e consente all'utente di chiudere la finestra con un pulsante. 36 | * @author Vittorio Piotti 37 | * @version 1.0 38 | * @since 16-10-2023 39 | */ 40 | public class WinErrorInEncryption { 41 | 42 | /** Finestra di dialogo per la visualizzazione degli errori. */ 43 | private final JDialog dialog = new JDialog(); 44 | 45 | /** Pannello principale della finestra di dialogo. */ 46 | private final JPanel mainPanel = new JPanel(new GridBagLayout()); 47 | 48 | /** Oggetto per la gestione della disposizione degli elementi nel pannello. */ 49 | private final GridBagConstraints gbc = new GridBagConstraints(); 50 | 51 | /** Etichetta principale che indica "Errore inserimento". */ 52 | private final JLabel label = new JLabel("Errore inserimento"); 53 | 54 | /** Pannello per la linea orizzontale di separazione. */ 55 | private final JPanel hr = new JPanel(new BorderLayout()); 56 | 57 | /** Pannello per la linea orizzontale più piccola di separazione. */ 58 | private final JPanel hr_small = new JPanel(new BorderLayout()); 59 | 60 | /** Pulsante per chiudere la finestra di dialogo. */ 61 | private final JButton closeButton = new JButton("Chiudi"); 62 | 63 | /** Array di etichette che rappresentano i messaggi di errore da visualizzare. */ 64 | private JLabel[] errorMessages; 65 | 66 | /** 67 | * Costruttore per creare e visualizzare una finestra di dialogo con i messaggi di errore. 68 | * 69 | * @param mainFrame Il frame principale a cui la finestra di dialogo è relativa. 70 | * @param errorMessages Un array di stringhe che rappresenta i messaggi di errore da visualizzare. 71 | */ 72 | public WinErrorInEncryption(JFrame mainFrame,String[] errorMessages){ 73 | dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 74 | dialog.setResizable(false); 75 | gbc.insets = new Insets(10, 10, 10, 10); 76 | label.setHorizontalAlignment(JLabel.CENTER); 77 | label.setBorder(BorderFactory.createEmptyBorder(10, 20, 0, 20)); 78 | label.setFont(new Font(label.getFont().getFontName(), Font.BOLD, label.getFont().getSize())); 79 | gbc.gridy++; 80 | gbc.gridwidth = 0; 81 | gbc.anchor = GridBagConstraints.CENTER; 82 | mainPanel.add(label, gbc); 83 | gbc.gridy++; 84 | hr_small.setBackground(Color.BLACK); 85 | hr_small.setPreferredSize(new Dimension(15, 7)); 86 | mainPanel.add(hr_small, gbc); 87 | 88 | this.errorMessages = new JLabel[errorMessages.length]; 89 | for (int i = 0; i < errorMessages.length;i++) { 90 | this.errorMessages[i] = new JLabel(errorMessages[i]); 91 | gbc.gridy++; 92 | gbc.gridwidth = 0; 93 | gbc.anchor = GridBagConstraints.WEST; 94 | mainPanel.add(this.errorMessages[i], gbc); 95 | } 96 | 97 | hr.setBackground(Color.GRAY); 98 | hr.setPreferredSize(new Dimension(230, 1)); 99 | gbc.gridx = 0; 100 | gbc.gridwidth = 2; 101 | gbc.gridy++; 102 | gbc.anchor = GridBagConstraints.CENTER; 103 | mainPanel.add(hr, gbc); 104 | closeButton.addActionListener(new ActionListener() { 105 | public void actionPerformed(ActionEvent e) { 106 | dialog.dispose(); 107 | } 108 | }); 109 | gbc.gridx = 1; 110 | gbc.gridy++; 111 | gbc.gridwidth = 1; 112 | gbc.anchor = GridBagConstraints.EAST; 113 | mainPanel.add(closeButton, gbc); 114 | dialog.add(mainPanel); 115 | dialog.pack(); 116 | dialog.setLocationRelativeTo(mainFrame); 117 | dialog.setVisible(true); 118 | } 119 | 120 | /** 121 | * Chiude la finestra di dialogo. 122 | */ 123 | public void dispose(){ 124 | dialog.dispose(); 125 | } 126 | 127 | /** 128 | * Metodo placeholder per ottenere il tipo di errore. Attualmente restituisce null. 129 | * 130 | * @return Il tipo di errore, attualmente sempre null. 131 | */ 132 | public String getErrorType() { 133 | return null; 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Fermat-And-RSA 2 | Soluzione software in Java che genera e salva su file i numeri primi con algoritmo di Fermat e algoritmo di crittografia RSA 3 | 4 | 5 | > [!NOTE] 6 | > Progetto scolastico 🎓 · Ⅳ 7 | 8 | 9 | > [!Warning] 10 | > Presenza di BUG nell'UI 11 | 12 | --- 13 | 14 | ## Javadoc 15 | 16 | Link al javadoc: [(link)](https://vittoriopiotti.altervista.org/FermatAndRsaJava/index.html) 17 | 18 | 19 | ## Preview 20 | 21 | Video di Test [(link)](https://drive.google.com/file/d/1IVb3ctowyLbrHMg7zlFN-Zv7If_51uzH/view?usp=sharing) 22 | 23 | 24 | --- 25 | 26 |
27 |
28 |
29 |
30 |
31 | ## Responsive
32 |
33 | |
|
|
34 | |-|-|
35 | |Small|Large|
36 |
37 |
38 |
39 |
40 | ## Utilizzo
41 |
42 | 1. Seleziona schermata di "Test Primalità"
43 | 2. Genera i numeri primi con algoritmo di Fermat
44 | 3. Salva su file i numeri primi
45 | 4. Seleziona schermata di "Algoritmo RSA"
46 | 5. Carica il file con i numeri primi
47 | 6. Cifra o decifra un messaggio
48 |
49 |
50 |
51 |
52 | ## Snippet Fermat Algorithm
53 |
54 |
55 | ```java
56 | public void algoritmoFermat(){
57 | long start; //tempo inizio calcolo numeri primi
58 | long end; //tempo fine calcolo numeri primi
59 | boolean checkPrimo; //verifica se un numero è primo
60 | //check = true: primo
61 | //check = false: composto
62 | start = System.currentTimeMillis(); //tempo inizio calcolo numeri primi
63 | //ciclo for di i che scorre da min a max
64 | for (
65 | BigInteger i = min; //è il numero di cui si verifica la primalità
66 | i.compareTo(max) <= 0;
67 | i = i.add(BigInteger.valueOf(1))
68 | ) {
69 | incrementProgressBar.run();
70 | checkPrimo = true;
71 | //ciclo for annidato di j che scorre da 2 al divisore massimo
72 | for (
73 | BigInteger j = BigInteger.valueOf(2); //è il dvisore del numero per la verifica della primalità
74 | j.compareTo(BigInteger.valueOf(10)) <= 0; //j compareTo fino al numero
75 | j = j.add(BigInteger.valueOf(1)))
76 | //verifica se j divisore di i ed in caso aggiorna check = false
77 | {
78 | if (Thread.currentThread().isInterrupted()) {
79 | end = System.currentTimeMillis(); //tempo fine calcolo numeri primi
80 | time = Math.abs(start - end) / 1000.0; //tempo durata calcolo numeri primi
81 | return;
82 | }
83 | if (!j.modPow(i.subtract(BigInteger.valueOf(1)), i).equals(BigInteger.valueOf(1))) checkPrimo = false;
84 | }
85 | if (checkPrimo){
86 | results.add(i.toString());
87 | appendResult.run();
88 | }
89 | }
90 | end = System.currentTimeMillis(); //tempo fine calcolo numeri primi
91 | time = Math.abs(start - end) / 1000.0; //tempo durata calcolo numeri primi
92 | }
93 |
94 | ```
95 |
96 |
97 | ## Albero di Path
98 |
99 | ```bash
100 | $ tree
101 | .
102 | ├──lib
103 | │ └── flatlaf-3.2.5.jar
104 | └──src
105 | └── org
106 | └── app
107 | ├── applications
108 | │ ├── encryption
109 | │ │ ├── ReadFile.java
110 | │ │ └── TestEncryption.java
111 | │ └── primality
112 | │ ├── SavePrimality.java
113 | │ └── TestPrimality.java
114 | ├── windows
115 | │ ├── dependencies
116 | │ │ ├── components
117 | │ │ │ ├── encryption
118 | │ │ │ │ ├── dialogs
119 | │ │ │ │ │ ├── WinErrorInEncryption.java
120 | │ │ │ │ │ └── WinErrorOutEncryption.java
121 | │ │ │ │ ├── panels
122 | │ │ │ │ │ ├── WinInEncryption.java
123 | │ │ │ │ │ ├── WinOutEncryption.java
124 | │ │ │ │ │ └── WinSaveEncryption.java
125 | │ │ │ │ └── WinEncryption.java
126 | │ │ │ ├── primality
127 | │ │ │ │ ├── dialogs
128 | │ │ │ │ │ ├── WinErrorInPrimality.java
129 | │ │ │ │ │ └── WinErrorOutPrimality.java
130 | │ │ │ │ ├── panels
131 | │ │ │ │ │ ├── WinInPrimality.java
132 | │ │ │ │ │ ├── WinOutPrimality.java
133 | │ │ │ │ │ └── WinSavePrimality.java
134 | │ │ │ │ └── WinPrimality.java
135 | │ │ │ └── WinHome.java
136 | │ │ └── managers
137 | │ │ ├── WinManagerEncryption.java
138 | │ │ └── WinManagerPrimality.java
139 | │ └── WinManager.java
140 | ├── App.java
141 | └── Main.java
142 |
143 | ```
144 |
145 | ## Licenze
146 |
147 |
148 | ### Fermat And RSA
149 |
150 | **Copyright** 2024 Vittorio Piotti [(GitHub page)](https://github.com/vittorioPiotti) [(Personal page)](https://vittoriopiotti.altervista.org/)
151 |
152 | **Version** [v1.0.0](https://github.com/vittorioPiotti/FermatAndRSA-Java/releases/tag/1.0.0)
153 |
154 | **License** [GPL-3.0](https://github.com/vittorioPiotti/Fermat-And-RSA/blob/main/LICENSE.md)
155 |
156 |
157 | ---
158 |
159 | ### FlatLaf
160 |
161 | **Copyright** 2024 JFormDesigner GmbH
162 |
163 | **Version** [v3.2.5](https://mvnrepository.com/artifact/com.formdev/flatlaf/3.2.5)
164 |
165 | **License** [Apache License 2.0](https://github.com/JFormDesigner/FlatLaf/blob/main/LICENSE)
166 |
167 |
--------------------------------------------------------------------------------
/project/src/org/app/applications/encryption/ReadFile.java:
--------------------------------------------------------------------------------
1 | /*
2 | Fermat And RSA v1.0.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/releases/tag/1.0.0)
3 | Copyright 2024 Vittorio Piotti
4 | Licensed under GPL-3.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/blob/main/LICENSE.md)
5 | */
6 |
7 | /*
8 | FlatLaf v3.2.5 (https://github.com/JFormDesigner/FlatLaf/releases/tag/3.2.5)
9 | Copyright 2024 JFormDesigner GmbH
10 | Licensed under Apache License 2.0 (https://github.com/JFormDesigner/FlatLaf/blob/main/LICENSE)
11 | */
12 |
13 | package org.app.applications.encryption;
14 |
15 | import java.io.BufferedReader;
16 | import java.io.File;
17 | import java.io.FileReader;
18 | import java.io.IOException;
19 | import java.util.ArrayList;
20 | import java.util.List;
21 | import java.util.Random;
22 |
23 |
24 | /**
25 | * Classe che gestisce la lettura di un file di testo contenente dati numerici.
26 | * Filtra le righe secondo specifiche condizioni e offre funzionalità per estrarre
27 | * o verificare i dati numerici contenuti nel file.
28 | * @author Vittorio Piotti
29 | * @version 1.0
30 | * @since 16-10-2023
31 | */
32 | public class ReadFile {
33 |
34 | /** Percorso del file da leggere. */
35 | private String path;
36 |
37 | /** Indica se il modulo inverso è attivo per il filtraggio dei dati. */
38 | private boolean modInverse;
39 |
40 | /**
41 | * Costruttore della classe ReadFile.
42 | *
43 | * @param path Percorso del file da leggere.
44 | * @param modInverse Se true, applica un filtro meno restrittivo sui dati numerici.
45 | */
46 | public ReadFile(String path,boolean modInverse) {
47 | this.path = path;
48 | this.modInverse = modInverse;
49 | }
50 |
51 | /**
52 | * Legge il file e restituisce i dati numerici filtrati.
53 | *
54 | * @return Una stringa con i dati numerici filtrati, o null se il file non esiste o si verifica un errore.
55 | */
56 | public String readFile() {
57 | StringBuilder numericData = new StringBuilder();
58 |
59 | if (!fileExists(path)) {
60 | return null;
61 | }
62 |
63 | try (BufferedReader br = new BufferedReader(new FileReader(path))) {
64 | String line;
65 |
66 | while ((line = br.readLine()) != null) {
67 | if (line.matches("^\\d+$") && line.length() >= 2) {
68 | if(modInverse == false){
69 | if(line.length() <= String.valueOf(Integer.MAX_VALUE).length() - 1) {
70 | numericData.append(line);
71 | numericData.append("\n");
72 | }
73 | }else{
74 | numericData.append(line);
75 | numericData.append("\n");
76 | }
77 | }
78 | }
79 | } catch (IOException e) {
80 | e.printStackTrace();
81 | return null;
82 | }
83 |
84 | return numericData.toString();
85 | }
86 |
87 | /**
88 | * Verifica se il file rispetta i criteri specificati (almeno 3 righe valide).
89 | *
90 | * @return true se il file contiene almeno 3 righe numeriche valide, altrimenti false.
91 | */
92 | public boolean checkFile() {
93 | if (this.path == null || !this.path.endsWith(".txt")) {
94 | return false;
95 | }
96 |
97 | int count = 0;
98 |
99 | if (!fileExists(path)) {
100 | return false;
101 | }
102 |
103 | try (BufferedReader br = new BufferedReader(new FileReader(this.path))) {
104 | String line;
105 |
106 | while ((line = br.readLine()) != null) {
107 | if (line.matches("^\\d+$") && line.length() >= 2) {
108 | if (modInverse == false) {
109 | if (line.length() <= String.valueOf(Integer.MAX_VALUE).length() - 1) {
110 | count++;
111 | }
112 | } else {
113 | count++;
114 | }
115 | if (count >= 3) {
116 | return true;
117 | }
118 | }
119 | }
120 | } catch (IOException e) {
121 | e.printStackTrace();
122 | return false;
123 | }
124 |
125 | return false;
126 | }
127 |
128 | /**
129 | * Estrae casualmente 3 righe numeriche dal file.
130 | *
131 | * @return Un array di 3 stringhe contenenti le righe numeriche estratte, o null se non ci sono abbastanza righe valide.
132 | */
133 | public String[] getRows() {
134 | // Verifica se il file esiste
135 | if (!fileExists(path)) {
136 | return null;
137 | }
138 |
139 | List27 | * Questa classe si occupa di: 28 | *
40 | * Questo attributo è responsabile della creazione e del controllo delle finestre relative ai calcoli di primalità e crittografia. 41 | *
42 | */ 43 | private static WinManager windowManager; 44 | 45 | /** 46 | * Oggetto per eseguire i test di primalità. 47 | *48 | * Questo attributo contiene l'istanza di {@link TestPrimality} che viene utilizzata per eseguire i test di primalità sui numeri. 49 | *
50 | */ 51 | private static TestPrimality primalityTest; 52 | 53 | /** 54 | * Oggetto per eseguire le operazioni di crittografia e decrittografia. 55 | *56 | * Questo attributo contiene l'istanza di {@link TestEncryption} che viene utilizzata per gestire le operazioni di crittografia e decrittografia. 57 | *
58 | */ 59 | private static TestEncryption encryption; 60 | 61 | 62 | /** 63 | * Oggetto per gestire il salvataggio dei risultati dei test di primalità in un file. 64 | *65 | * Questo attributo contiene l'istanza di {@link SavePrimality} che è responsabile del salvataggio dei risultati dei test di primalità in un file. 66 | *
67 | */ 68 | private static SavePrimality saveInFilePrimality; 69 | 70 | /** 71 | * Oggetto per leggere i file necessari alle operazioni di crittografia. 72 | *73 | * Questo attributo contiene l'istanza di {@link ReadFile} che viene utilizzata per leggere i file e verificare i dati necessari per le operazioni di crittografia. 74 | *
75 | */ 76 | private static ReadFile readFileEncryption; 77 | 78 | /** 79 | * Thread utilizzato per eseguire i test di primalità. 80 | *81 | * Questo attributo contiene il {@link Thread} che esegue il test di primalità, permettendo l'esecuzione in background. 82 | *
83 | */ 84 | private static Thread taskPrimalityTest; 85 | 86 | /** 87 | * {@link Runnable} per stampare i risultati del test di primalità e aggiornare l'interfaccia utente. 88 | *89 | * Questo {@link Runnable} è responsabile dell'aggiornamento dell'interfaccia utente con i risultati calcolati dal test di primalità. 90 | *
91 | */ 92 | public static Runnable printResultPrimality = () -> { 93 | windowManager.incrementCalculatedPrimeNumbers(); 94 | if(!primalityTest.getResult().equals("1") && !primalityTest.getResult().equals("0") ){ 95 | windowManager.appendCalculatedNumber( " " + primalityTest.getResult() +"\n"); 96 | } 97 | }; 98 | 99 | /** 100 | * {@link Runnable} per incrementare la barra di progresso nell'interfaccia utente. 101 | *102 | * Questo {@link Runnable} è responsabile dell'incremento della barra di progresso durante l'esecuzione del calcolo di primalità. 103 | *
104 | */ 105 | private static Runnable incrementProgressBar = () -> { 106 | windowManager.incrementProgressBar(); 107 | }; 108 | 109 | /** 110 | * {@link Runnable} per fermare il calcolo di primalità. 111 | *112 | * Questo {@link Runnable} interrompe il thread di calcolo della primalità se è in esecuzione. 113 | *
114 | */ 115 | public static Runnable stopCalcPrimality = () -> { 116 | if (taskPrimalityTest != null) { 117 | taskPrimalityTest.interrupt(); 118 | } 119 | }; 120 | 121 | /** 122 | * Genera una stringa di risultati della ricerca sui numeri primi. 123 | *124 | * Questo metodo costruisce una stringa che include informazioni dettagliate sui risultati della ricerca di numeri primi. 125 | * La stringa contiene: 126 | *
155 | * Questo {@link Runnable} crea un nuovo file e salva i risultati dei test di primalità se la finestra di salvataggio è visibile. 156 | *
157 | */ 158 | public static Runnable startSavingPrimality = () -> { 159 | if(windowManager.existWindowSaveInFile() == true){ 160 | saveInFilePrimality = new SavePrimality(getResults(), windowManager.getPath()); 161 | saveInFilePrimality.newFile(); 162 | } 163 | }; 164 | 165 | /** 166 | * {@link Runnable} per inizializzare e controllare la lettura del file di crittografia. 167 | *168 | * Questo {@link Runnable} legge il file di crittografia, verifica la validità e crea un'istanza di {@link TestEncryption} se il file è valido. 169 | *
170 | */ 171 | public static Runnable initAndCheckReadingFile = () -> { 172 | 173 | readFileEncryption = new ReadFile(windowManager.getPathReading(),windowManager.getModInverse()); 174 | windowManager.setFileErrorType(readFileEncryption.checkFile()); 175 | readFileEncryption = new ReadFile(windowManager.getPathReading(),windowManager.getModInverse()); 176 | String[] selectedRows = readFileEncryption.getRows(); 177 | if (readFileEncryption.checkFile() == true) { 178 | encryption = new TestEncryption(windowManager.getModInverse(),selectedRows[0],selectedRows[1],selectedRows[2]); 179 | } 180 | 181 | }; 182 | 183 | 184 | 185 | /** 186 | * {@link Runnable} per avviare il calcolo dei numeri primi. 187 | *188 | * Questo {@link Runnable} crea un'istanza di {@link TestPrimality}, avvia un nuovo thread per eseguire il calcolo e aggiorna l'interfaccia utente. 189 | *
190 | */ 191 | public static Runnable startCalcPrimality = () -> { 192 | primalityTest = new TestPrimality(windowManager.getMin(), windowManager.getMax(), windowManager.getMetodo(), stopCalcPrimality, incrementProgressBar,printResultPrimality); 193 | taskPrimalityTest = new Thread(primalityTest, "Thread-TestPrimalita"); 194 | taskPrimalityTest.start(); 195 | }; 196 | 197 | /** 198 | * {@link Runnable} per avviare il calcolo della crittografia. 199 | *200 | * Questo {@link Runnable} legge il file di crittografia e, in base al metodo di crittografia, esegue l'operazione di crittografia o decrittografia. 201 | *
202 | */ 203 | public static Runnable startCalcEncryption = () -> { 204 | readFileEncryption = new ReadFile(windowManager.getPathReading(),windowManager.getModInverse()); 205 | if (readFileEncryption.checkFile() == true) { 206 | 207 | if(windowManager.getEncryptionMetodo() == 0){ 208 | windowManager.setResultsEncryption(encryption.encrypt(windowManager.getMessage())); 209 | }else{ 210 | windowManager.setResultsEncryption(encryption.decrypt(windowManager.getMessage())); 211 | } 212 | 213 | 214 | 215 | } 216 | 217 | 218 | }; 219 | 220 | /** 221 | * {@link Runnable} per controllare eventuali modifiche al file di crittografia. 222 | *223 | * Questo {@link Runnable} verifica se il file di crittografia è stato modificato e, se necessario, aggiorna l'interfaccia utente di conseguenza. 224 | *
225 | */ 226 | public static Runnable checkFileOnchange = () -> { 227 | if (readFileEncryption != null){ 228 | if(readFileEncryption.checkFile()){ 229 | windowManager.setFileErrorType(false); 230 | windowManager.openWindowErrorOutput(); 231 | 232 | 233 | } 234 | 235 | } 236 | 237 | }; 238 | 239 | 240 | /** 241 | * Costruttore della classe {@code App}. 242 | *243 | * Inizializza {@link WinManager} con i vari {@link Runnable} per gestire le operazioni di calcolo e le interazioni dell'interfaccia utente. 244 | *
245 | */ 246 | public App(){ 247 | windowManager = new WinManager(startCalcPrimality,stopCalcPrimality,startSavingPrimality,startCalcEncryption,initAndCheckReadingFile,checkFileOnchange); 248 | } 249 | 250 | 251 | } 252 | -------------------------------------------------------------------------------- /project/src/org/app/windows/WinManager.java: -------------------------------------------------------------------------------- 1 | /* 2 | Fermat And RSA v1.0.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/releases/tag/1.0.0) 3 | Copyright 2024 Vittorio Piotti 4 | Licensed under GPL-3.0 (https://github.com/vittorioPiotti/Fermat-And-RSA/blob/main/LICENSE.md) 5 | */ 6 | 7 | /* 8 | FlatLaf v3.2.5 (https://github.com/JFormDesigner/FlatLaf/releases/tag/3.2.5) 9 | Copyright 2024 JFormDesigner GmbH 10 | Licensed under Apache License 2.0 (https://github.com/JFormDesigner/FlatLaf/blob/main/LICENSE) 11 | */ 12 | 13 | package org.app.windows; 14 | 15 | import java.util.function.Supplier; 16 | 17 | import javax.swing.JFrame; 18 | import javax.swing.UIManager; 19 | import javax.swing.UnsupportedLookAndFeelException; 20 | 21 | import org.app.windows.dependencies.components.WinHome; 22 | import org.app.windows.dependencies.managers.WinManagerEncryption; 23 | import org.app.windows.dependencies.managers.WinManagerPrimality; 24 | 25 | import com.formdev.flatlaf.FlatLightLaf; 26 | 27 | 28 | /** 29 | * @author Vittorio Piotti 30 | * @version 1.0 31 | * @since 16-10-2023 32 | * Classe principale per la gestione delle finestre dell'applicazione, che include la gestione delle finestre di test di primalità e di cifratura RSA. 33 | * 34 | * Questa classe coordina le finestre di test di primalità e di cifratura RSA attraverso i rispettivi gestori e gestisce le interazioni tra di esse. 35 | */ 36 | public class WinManager { 37 | 38 | 39 | 40 | /** 41 | * Gestore per le finestre e le funzionalità relative ai test di primalità. 42 | * 43 | * Questo attributo è utilizzato per accedere e gestire la finestra e le operazioni associate al test di primalità. 44 | */ 45 | private WinManagerPrimality winManagerPrimality; 46 | 47 | /** 48 | * Gestore per le finestre e le funzionalità relative alla cifratura RSA. 49 | * 50 | * Questo attributo è utilizzato per accedere e gestire la finestra e le operazioni associate alla cifratura RSA. 51 | */ 52 | private WinManagerEncryption winManagerEncryption; 53 | 54 | 55 | /** 56 | * Finestra principale dell'applicazione che gestisce la visualizzazione e l'interazione tra le finestre di test di primalità e cifratura RSA. 57 | * 58 | * Questo attributo rappresenta la finestra principale che ospita le finestre di test di primalità e cifratura RSA, e gestisce la loro disposizione e visibilità. 59 | */ 60 | private WinHome windowHome; 61 | 62 | 63 | 64 | 65 | /** 66 | * Fornisce un'istanza di {@link JFrame} della finestra principale dell'applicazione. 67 | * 68 | * Questo attributo è una funzione che restituisce la finestra principale dell'applicazione {@code JFrame}. 69 | * È utilizzato per ottenere una referenza alla finestra principale quando è necessario aggiornare o interagire con essa, 70 | * come nel caso di apertura di nuove finestre di errore o salvataggio. Viene utilizzato dai gestori di finestre secondarie 71 | * per avere accesso alla finestra principale per la gestione dell'interfaccia utente e delle operazioni correlate. 72 | */ 73 | private final Supplier