Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .idea/libraries/bytedeco_javacv_platform.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

192 changes: 192 additions & 0 deletions src/Classes/HelpMenu.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
package Classes;

import java.util.Scanner;

public class HelpMenu {

// Main method to display the help menu and handle user navigation.
public static void displayMenuHelp(Scanner scanner) {
int choice;

// Loop to display the menu until the user chooses to exit.
do {
System.out.println("\n========== HELP MENU ==========");
System.out.println("1. How to create a database?");
System.out.println("2. How to encrypt my database password?");
System.out.println("3. How the algorithms work ?");
System.out.println("4. How to decrypt my password?");
System.out.println("5. How to a add/ modify/ delete a site in my database?");
System.out.println("6. Exit help menu");
System.out.print("Select an option: ");

// Read user's choice.
choice = scanner.nextInt();
scanner.nextLine(); // Consume newline character.

// Handle the user's choice using a switch statement.
switch (choice) {
case 1:
navigateCreateDatabaseHelp(scanner); // Navigate to database creation help.
break;
case 2:
navigateEncryptPasswordHelp(scanner); // Navigate to password encryption help.
break;
case 3:
navigateExplainAlgorithms(scanner); // Navigate to algorithm explanations.
break;
case 4:
navigateDecryptPasswordHelp(scanner); // Navigate to password decryption help.
break;
case 5:
navigateNewSiteHelp(scanner);
break;
case 6:
System.out.println("Exiting help menu..."); // Exit message.
break;
default:
System.out.println("Invalid choice. Please select a valid option."); // Handle invalid input.
}
} while (choice != 5);

// Close the scanner when exiting the menu.
scanner.close();
}

// Method to provide help on creating a database.
private static void navigateCreateDatabaseHelp(Scanner scanner) {
boolean back = false;
do {
System.out.println("\n--- How to Create a Database ---");
System.out.println("1. Open the application.");
System.out.println("2. Choose the 'Create a new database' option in the main menu.");
System.out.println("3. Enter a name for your database and a master password.");
System.out.println("4. The application will encrypt and store your database securely.");
System.out.println("5. Remember your master password; it cannot be recovered if lost.");
System.out.println("6. Go back");
System.out.println("7. Exit Help Menu");
System.out.print("Select an option: ");

// Read the user's choice.
String choice = scanner.nextLine();
if (choice.equalsIgnoreCase(String.valueOf(6))) {
back = true; // Go back to the main help menu.
} else if (choice.equalsIgnoreCase(String.valueOf(7))) {
System.out.println("Exiting help menu...");
System.exit(0); // Exit the program.
} else {
System.out.println("Invalid input. Please choose 'Go back' or 'Exit'.");
}
} while (!back);
}

// Method to provide help on encrypting database passwords.
private static void navigateEncryptPasswordHelp(Scanner scanner) {
boolean back = false;
do {
System.out.println("\n--- How to Encrypt My Database Password ---");
System.out.println("1. When adding a password to your database, choose an encryption algorithm:");
System.out.println(" - ROT(X): Shifts characters by X positions.");
System.out.println(" - RC4: A stream cipher for quick encryption.");
System.out.println(" - Vigenere: Uses a keyword to shift characters.");
System.out.println(" - Enigma: Simulates the historical encryption machine.");
System.out.println(" - Polybe: Encodes text using a 5x5 grid.");
System.out.println("2. The application will encrypt and save the password using the selected algorithm.");
System.out.println("3. Go back");
System.out.println("4. Exit Help Menu");
System.out.print("Select an option: ");

String choice = scanner.nextLine();
if (choice.equalsIgnoreCase(String.valueOf(3))) {
back = true; // Go back to the main help menu.
} else if (choice.equalsIgnoreCase(String.valueOf(4))) {
System.out.println("Exiting help menu...");
System.exit(0); // Exit the program.
} else {
System.out.println("Invalid input. Please choose 'Go back' or 'Exit'.");
}
} while (!back);
}




// Method to explain encryption algorithms.
private static void navigateExplainAlgorithms(Scanner scanner) {
boolean back = false;
do {
System.out.println("\n--- Algorithm Explanations ---");
System.out.println("1. ROT(X): Rotates each character by X positions in the alphabet.");
System.out.println(" - Example: 'A' with ROT(3) becomes 'D'.");
System.out.println("2. RC4: A symmetric key stream cipher that encrypts data byte by byte.");
System.out.println("3. Vigenere: Uses a keyword to shift letters cyclically.");
System.out.println(" - Example: Keyword 'KEY' applied to text shifts letters by positions derived from 'KEY'.");
System.out.println("4. Enigma: Mimics the encryption of the WWII Enigma machine.");
System.out.println("5. Polybe: Encodes text into pairs of numbers based on a 5x5 grid.");
System.out.println("6. Go back");
System.out.println("7. Exit Help Menu");
System.out.print("Select an option: ");

String choice = scanner.nextLine();
if (choice.equalsIgnoreCase(String.valueOf(6))) {
back = true; // Go back to the main help menu.
} else if (choice.equalsIgnoreCase(String.valueOf(7))) {
System.out.println("Exiting help menu...");
System.exit(0); // Exit the program.
} else {
System.out.println("Invalid input. Please choose 'Go back' or 'Exit'.");
}
} while (!back);
}

// Method to provide help on decrypting passwords.
private static void navigateDecryptPasswordHelp(Scanner scanner) {
boolean back = false;
do {
System.out.println("\n--- How to Decrypt My Password ---");
System.out.println("1. Select the password you want to decrypt from the database.");
System.out.println("2. Enter the master password to access the database.");
System.out.println("3. The application will identify the encryption algorithm used.");
System.out.println("4. Enter any additional required keys or settings (e.g., keyword for Vigenere).");
System.out.println("5. The password will be decrypted and displayed securely.");
System.out.println("6. Go back");
System.out.println("7. Exit Help Menu");
System.out.print("Select an option: ");

String choice = scanner.nextLine();
if (choice.equalsIgnoreCase(String.valueOf(6))) {
back = true; // Go back to the main help menu.
} else if (choice.equalsIgnoreCase(String.valueOf(7))) {
System.out.println("Exiting help menu...");
System.exit(0); // Exit the program.
} else {
System.out.println("Invalid input. Please choose 'Go back' or 'Exit'.");
}
} while (!back);
}

// Method to provide help on adding/ modifying/ deleting a site in the database
private static void navigateNewSiteHelp(Scanner scanner) {
boolean back = false;
do {
System.out.println("\n--- How to Add/ Modify/ Delete a Site in my database ---");
System.out.println("1. In the main menu select : 'Choose an existing database'");
System.out.println("2. Connect to your database where you have your password");
System.out.println("3. Select 'Manage sites'");
System.out.println("4. Select 'Add a new site'/ 'Modify a site' or 'Delete a site'");
System.out.println("5. Follow the instructions");
System.out.println("6. Go back");
System.out.println("7. Exit Help Menu");
System.out.print("Select an option: ");

String choice = scanner.nextLine();
if (choice.equalsIgnoreCase(String.valueOf(6))) {
back = true; // Go back to the main help menu.
} else if (choice.equalsIgnoreCase(String.valueOf(7))) {
System.out.println("Exiting help menu...");
System.exit(0); // Exit the program.
} else {
System.out.println("Invalid input. Please choose 'Go back' or 'Exit'.");
}
} while (!back);
}
}
48 changes: 35 additions & 13 deletions src/Classes/Menu.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,49 +6,71 @@

public class Menu {
public static void main(String[] args) {
// Initialize the scanner for user input
Scanner scanner = new Scanner(System.in);
// Load the database file to manage existing databases
File databasesFile = new File("databases.json");
DatabasesManager dbManager = new DatabasesManager(databasesFile);

// Display the main menu options
System.out.println("Welcome to the Encryption/Decryption Program");
System.out.println("Choose an option:");
System.out.println("1. Choose an existing database");
System.out.println("2. Create a new database");
System.out.println("3. Help Menu");

// Read the user's choice for the menu
int dbChoice = scanner.nextInt();
scanner.nextLine();
scanner.nextLine(); // Consume the newline character left by nextInt

// Handle the case where the user wants to connect to an existing database
if (dbChoice == 1) {
System.out.println("Enter the name of the database:");
String dbName = scanner.nextLine();
String dbName = scanner.nextLine(); // Read the database name
System.out.println("Enter the password:");
String inputPassword = scanner.nextLine();
String inputPassword = scanner.nextLine(); // Read the database password

// Verify the database credentials
if (dbManager.verifyDatabase(dbName, inputPassword)) {
System.out.println("Successfully connected to the database: " + dbName);
// Initialize the SiteManager to manage sites within the database
SiteManager siteManager = new SiteManager(new File(dbName + ".json"));
siteManager.manageSites(scanner);
siteManager.manageSites(scanner); // Begin managing sites
} else {
System.out.println("Incorrect database name or password.");
System.out.println("Incorrect database name or password."); // Error message for invalid credentials
}
} else if (dbChoice == 2) {
}
// Handle the case where the user wants to create a new database
else if (dbChoice == 2) {
System.out.println("Enter the name of the new database:");
String dbName = scanner.nextLine();
String dbName = scanner.nextLine(); // Read the new database name
System.out.println("Choose a password option:");
System.out.println("1. Enter a custom password");
System.out.println("2. Generate a random password");

// Read the user's choice for password type
int passwordChoice = scanner.nextInt();
scanner.nextLine();
scanner.nextLine(); // Consume the newline character left by nextInt

// Determine the password based on the user's choice
String password = passwordChoice == 1
? scanner.nextLine()
: PasswordUtils.generateRandomPassword(12);
? scanner.nextLine() // Custom password entered by user
: PasswordUtils.generateRandomPassword(12); // Generate a random password

System.out.println("Generated password: " + password);
// Create the new database with the given name and password
dbManager.createDatabase(dbName, password);
// Initialize the SiteManager for the new database
SiteManager siteManager = new SiteManager(new File(dbName + ".json"));
siteManager.manageSites(scanner);
} else {
System.out.println("Invalid choice.");
siteManager.manageSites(scanner); // Begin managing sites
}
// Handle the case where the user wants to access the help menu
else if (dbChoice == 3){
HelpMenu.displayMenuHelp(scanner); // Display the help menu
}
// Handle invalid choices
else {
System.out.println("Invalid choice."); // Error message for invalid input
}
}
}
Loading