Deploy su server Java
All checks were successful
Deploy / trigger (push) Successful in 19s

This commit is contained in:
2026-03-27 22:08:12 +01:00
parent 56214f1b57
commit 19d360b4d6
13 changed files with 5 additions and 4 deletions

View File

@@ -0,0 +1,140 @@
package com.crypto;
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
// ─────────────────────────────────────────────
// Menu
// ─────────────────────────────────────────────
private static int scegliDimensioneChiave(Scanner scanner) {
int bits = 0;
while (bits == 0) {
System.out.println("\nSeleziona la dimensione della chiave:");
System.out.println(" [1] 512 bit (Solo uso didattico)");
System.out.println(" [2] 1024 bit (Deprecata, solo test)");
System.out.println(" [3] 2048 bit (Standard attuale)");
System.out.println(" [4] 3072 bit (Ottimo compromesso)");
System.out.println(" [5] 4096 bit (Alta sicurezza)");
System.out.print("Scelta (1-5): ");
try {
int scelta = Integer.parseInt(scanner.nextLine().trim());
// Assegniamo i bit in base alla scelta
switch (scelta) {
case 1 -> bits = 512;
case 2 -> bits = 1024;
case 3 -> bits = 2048;
case 4 -> bits = 3072;
case 5 -> bits = 4096;
default -> System.out.println("❌ Scelta non valida. Inserisci un numero da 1 a 5.");
}
} catch (NumberFormatException e) {
System.out.println("❌ Errore: Inserisci un numero valido.");
}
}
System.out.println("Selezionata chiave da " + bits + " bit.");
return bits;
}
// Main
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("==========================================");
System.out.println(" RSA CRYPTO ENGINE ");
System.out.println("==========================================");
// --- 1. SETUP DELLE CHIAVI ---
int dimChiave = scegliDimensioneChiave(scanner);
System.out.println("\n⏳ Generazione delle chiavi in corso...");
// Passiamo dimChiave / 2 come facevi prima per p e q
RSA.RSAkeys chiavi = RSA.defkeys(dimChiave / 2);
System.out.println("> Chiavi generate con successo!");
boolean continua = true;
// --- CICLO PRINCIPALE ---
while (continua) {
System.out.println("\n------------------------------------------");
System.out.println("Cosa vuoi fare?");
System.out.println(" [1] Cifra un numero");
System.out.println(" [2] Cifra una stringa");
System.out.println(" [3] Rigenera le chiavi");
System.out.println(" [0] Esci");
System.out.println("------------------------------------------");
System.out.print("Scelta: ");
int scelta = -1;
try {
scelta = Integer.parseInt(scanner.nextLine().trim());
} catch (NumberFormatException ignored) {
}
System.out.println();
switch (scelta) {
case 1 -> {
// MODALITÀ NUMERO
System.out.print("Inserisci il numero da cifrare: ");
try {
BigInteger m = new BigInteger(scanner.nextLine().trim());
System.out.println("> Cifratura in corso...");
BigInteger c = RSA.encrypt(m, chiavi.e(), chiavi.n());
System.out.println("Cifrato:\n" + c);
System.out.println("\n> Decifratura in corso...");
BigInteger dec = RSA.decrypt(c, chiavi.d(), chiavi.n());
System.out.println("Decifrato:\n" + dec);
} catch (IllegalArgumentException ex) {
System.out.println("> Errore: Assicurati di inserire un numero valido.");
}
}
case 2 -> {
// MODALITÀ STRINGA
System.out.print("Inserisci il testo da cifrare: ");
String input = scanner.nextLine();
System.out.println("> Cifratura in corso...");
String cifrato = RSA.encrypt(input, chiavi.e(), chiavi.n());
if (cifrato != null && !cifrato.isEmpty()) {
// 2. SOLO PER LA STAMPA: nascondiamo il binario convertendolo in Base64
String base64 = java.util.Base64.getEncoder().encodeToString(cifrato.getBytes());
System.out.println("Cifrato (Base64):\n" + base64);
}
System.out.println("\n> Decifratura in corso...");
String dec = RSA.decrypt(cifrato, chiavi.d(), chiavi.n());
System.out.println("Decifrato:\n" + dec);
}
case 3 -> {
// RIGENERA CHIAVI
dimChiave = scegliDimensioneChiave(scanner);
System.out.println("\n> Generazione delle chiavi in corso...");
chiavi = RSA.defkeys(dimChiave / 2);
System.out.println("> Chiavi rigenerate con successo!");
}
case 0 -> {
continua = false;
System.out.println("Chiusura del motore RSA. Alla prossima!");
}
default -> System.out.println("> Scelta non valida, riprova.");
}
}
scanner.close();
}
}