
Today, we will build a Password and Notes Manager in Java with Swing. This application can be helpful in storing and managing passwords and notes for an individual.
Project Overview: Password and Notes Manager in Java
Project Name: | Password and Notes Manager in Java |
Abstract: | It’s a GUI-based project used with the swing library to organize all the elements that work under the Password and Notes Manager. |
Language Used: | Java |
IDE: | VS Code |
Java version (Recommended): | Java SE 18.0. 2.1 |
Database: | None |
Type: | Desktop Application |
Recommended for: | Intermediates of Java |
Time to build: | 2-3 hours |
Features
- Generate a random Password of a length >4
- Store and Retrieve passwords
- Delete a password
- Encrypt a plain text with a secret key
- Decrypt the encrypted text with the secret key
- Add a note and view the note added
Complete Code for Password and Notes Manager in Java
We have used an ArrayList to store the notes and a HashMap structure to store the name and password associated with the name. For encryption, we have used the PBEWithMD5AndDES algorithm.
Let’s start, first create a project folder and a file named PasswordMaganer.java. Download the images for the project from here and add these images to the project folder. Now paste the below lines of code into the file. Comments are provided for explanation.
import java.awt.*;import javax.swing.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.ArrayList;import java.security.SecureRandom;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.security.InvalidAlgorithmParameterException;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.security.spec.AlgorithmParameterSpec;import java.security.spec.InvalidKeySpecException;import java.security.spec.KeySpec;import java.util.Base64;import javax.crypto.*;import javax.crypto.spec.PBEKeySpec;import javax.crypto.spec.PBEParameterSpec;// This class is used to create a loading screenclass SplashScreen {JFrame frame;JLabel image=new JLabel(new ImageIcon("key-lock.png"));JLabel text=new JLabel("PASSWORD & NOTES MANAGER");JProgressBar progressBar=new JProgressBar();JLabel message=new JLabel();SplashScreen(){createGUI();addImage();addText();addProgressBar();runningPBar();}public void createGUI(){frame=new JFrame(); // to create a frameframe.getContentPane().setLayout(null); // to set the layout of the frameframe.setUndecorated(true);frame.setSize(400,400); // to set the size of the frameframe.setLocationRelativeTo(null);frame.getContentPane().setBackground(new Color(0XFF8787)); // to set the background color of the frameframe.setVisible(true);}public void addImage(){image.setSize(400,200); // to set the size of the imageframe.add(image);}public void addText(){text.setFont(new Font("MV Boli",Font.BOLD,20)); // to set the font of the texttext.setBounds(30,200,400,30);text.setForeground(Color.black);frame.add(text);}public void addProgressBar(){progressBar.setBounds(100,280,200,30); // to set the size of the progress barprogressBar.setBorderPainted(true);progressBar.setStringPainted(true);progressBar.setBackground(Color.black);progressBar.setForeground(new Color(0X38E54D));progressBar.setValue(0);frame.add(progressBar);}public void runningPBar(){int i=0;//Creating an integer variable and initializing it to 0while( i<=100){try{Thread.sleep(40); //Pausing execution for 50 millisecondsprogressBar.setValue(i); //Setting value of Progress Bari++;if(i==100)frame.dispose();}catch(Exception e){e.printStackTrace();}}}}//Linear Probing Implementationclass HashtablePassword implements hashTableMap {private final int useProbe; //0 = Linear Probing, 1 = Quadratic Probingprivate Entry[] entries; //The array of entriesprivate final float loadFactor; //The load factorprivate int size, used; //used acquires space for NILprivate final Entry NIL = new Entry(null, null); //Deleted entriesprivate static class Entry{Object key, value;Entry(Object k, Object v){key = k; value = v;}}public HashtablePassword(int capacity, float loadFactor, int useProbe){entries = new Entry[capacity];this.loadFactor = loadFactor;this.useProbe = useProbe;}//Complementary functionspublic int hash(Object key){return (key.hashCode() & 0x7FFFFFFF) % entries.length;}private int nextProbe(int h, int i){return (h+i) % entries.length; //Linear Probing}private void rehash(){Entry[] oldEntries = entries;entries = new Entry[2*entries.length+1];for (Entry entry : oldEntries) {if (entry == NIL || entry == null) continue;int h = hash(entry.key);for (int x = 0; x < entries.length; x++) {int j = nextProbe(h, x);if (entries[j] == null) {entries[j] = entry;break;}}used = size;}}@Overridepublic int add_Acc(Object Account, Object passwd) {if(used > (loadFactor*entries.length))rehash();int h = hash(Account);for (int i = 0; i < entries.length; i++){int j = (h+i) % entries.length;Entry entry = entries[j];if(entry==null){entries[j]= new Entry(Account, passwd);++size;++used;return h;}if(entry == NIL)continue;if(entry.key.equals(Account)){Object oldValue = entry.value;entries[j].value = passwd;return (int) oldValue;}}return h;}@Overridepublic Object get_Acc(Object Account) {int h = hash(Account);for(int i = 0; i < entries.length; i++){int j = nextProbe(h , i);Entry entry = entries[j];if(entry == null)break;if(entry == NIL)continue;if(entry.key.equals(Account)) return entry.value;}return null;}@Overridepublic Object remove_Acc(Object Account) {int h = hash(Account);for(int i = 0; i < entries.length; i++){int j = nextProbe(h,i);Entry entry = entries[j];if(entry == NIL)continue;if(entry.key.equals(Account)){Object Value = entry.value;entries[j] = NIL;size--;return Value;}}return null;}}class CryptoUtil{Cipher ecipher;Cipher dcipher;// 8-byte Saltbyte[] salt = {(byte) 0xA9, (byte) 0x9B, (byte) 0xC8, (byte) 0x32,(byte) 0x56, (byte) 0x35, (byte) 0xE3, (byte) 0x03};// Iteration countint iterationCount = 19;public CryptoUtil() {}/**** @param secretKey Key used to encrypt data* @param plainText Text input to be encrypted* @return Returns encrypted text* @throws java.security.NoSuchAlgorithmException* @throws java.security.spec.InvalidKeySpecException* @throws javax.crypto.NoSuchPaddingException* @throws java.security.InvalidKeyException* @throws java.security.InvalidAlgorithmParameterException* @throws java.io.UnsupportedEncodingException* @throws javax.crypto.IllegalBlockSizeException* @throws javax.crypto.BadPaddingException**/public String encrypt(String secretKey, String plainText)throws NoSuchAlgorithmException,InvalidKeySpecException,NoSuchPaddingException,InvalidKeyException,InvalidAlgorithmParameterException,UnsupportedEncodingException,IllegalBlockSizeException,BadPaddingException {//Key generation for enc and descKeySpec keySpec = new PBEKeySpec(secretKey.toCharArray(), salt, iterationCount);SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);// Prepare the parameter to the ciphersAlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);//Enc processecipher = Cipher.getInstance(key.getAlgorithm());ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);String charSet = "UTF-8";byte[] in = plainText.getBytes(charSet);byte[] out = ecipher.doFinal(in);String encStr = new String(Base64.getEncoder().encode(out));return encStr;}/*** @param secretKey Key used to decrypt data* @param encryptedText encrypted text input to decrypt* @return Returns plain text after decryption* @throws java.security.NoSuchAlgorithmException* @throws java.security.spec.InvalidKeySpecException* @throws javax.crypto.NoSuchPaddingException* @throws java.security.InvalidKeyException* @throws java.security.InvalidAlgorithmParameterException* @throws java.io.UnsupportedEncodingException* @throws javax.crypto.IllegalBlockSizeException* @throws javax.crypto.BadPaddingException*/public String decrypt(String secretKey, String encryptedText)throws NoSuchAlgorithmException,InvalidKeySpecException,NoSuchPaddingException,InvalidKeyException,InvalidAlgorithmParameterException,UnsupportedEncodingException,IllegalBlockSizeException,BadPaddingException,IOException {//Key generation for enc and descKeySpec keySpec = new PBEKeySpec(secretKey.toCharArray(), salt, iterationCount);SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);// Prepare the parameter to the ciphersAlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);//Decryption process; same key will be used for decrdcipher = Cipher.getInstance(key.getAlgorithm());dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);byte[] enc = Base64.getDecoder().decode(encryptedText);byte[] utf8 = dcipher.doFinal(enc);String charSet = "UTF-8";String plainStr = new String(utf8, charSet);return plainStr;}}class PasswordGenerator {private static final SecureRandom random = new SecureRandom();private static final String caps="ABCDEFGHIJKLMNOPQRSTUVWXYZ";private static final String small_caps="abcdefghijklmnopqrstuvwxyz";private static final String Numeric="1234567890";private static final String special_char="~!@#$%^&*(_+{}|:_[?]>=<";private static final String dic = caps + small_caps + Numeric + special_char;public String generatePassword(int len) {StringBuilder password= new StringBuilder();for (int i = 0; i <len ; i++) {int index = random.nextInt(dic.length());password.append(dic.charAt(index));}return password.toString();}}interface hashTableMap {Object get_Acc(Object Account);int add_Acc(Object Account, Object passwd);Object remove_Acc(Object Account);}class PasswordManager implements ActionListener {//Store password class referenceHashtablePassword data = new HashtablePassword(15,0.5F,0);// GUI variables declarationJFrame frame;JFrame frame2;JLabel background;Container conn1,conn2;JLabel lAcc,lPass;JTextArea encryptPasswdArea, genePassArea, searchPassArea;JButton PassGeneBtn,PassEncryptBtn, PassStoreBtn, PassSearchBtn, AccAddBtn, PassDeleteBtn;JTextField tAcc,tPass;JButton addNoteBtn;JLabel addNoteLabel;JTextArea tNote;JButton addNote;JFrame conn3;ArrayList<String> notes = new ArrayList<>(); // to store the notes in an array list of string type@Overridepublic void actionPerformed(ActionEvent e) { }//Frame settingspublic static void FrameGUI(JFrame frame){frame.setVisible(true);frame.setLayout(null);frame.setLocationRelativeTo(null);}//container settingspublic static void ContainerGUI(Container conn){conn.setVisible(true);conn.setBackground(Color.getHSBColor(20.4f, 10.5f, 12.9f));conn.setLayout(null);}// buttons settingspublic void GUIButtonsSetting(JButton btn){btn.setBackground(new Color(0XFB2576));btn.setForeground(Color.WHITE);btn.setBorder(BorderFactory.createLineBorder(Color.BLACK, 3));btn.setFocusable(false);Cursor crs = new Cursor(Cursor.HAND_CURSOR);btn.setCursor(crs);Font fn = new Font("MV Boli", Font.BOLD, 15);btn.setFont(fn);}//GUI of Store passwordpublic void StoringGUI(){frame2 = new JFrame("Store your passwords");frame2.setBounds(1400, 300, 800, 500);frame2.setSize(400,400);FrameGUI(frame2);conn2 = frame2.getContentPane();ContainerGUI(conn2);Font fn = new Font("MV Boli", Font.BOLD, 20);//Account textFiled and labellAcc = new JLabel("ACCOUNT NAME");lAcc.setBounds(90, 23, 380, 20);lAcc.setFont(fn);conn2.add(lAcc);tAcc = new JTextField();tAcc.setBounds(90,70,200,50);tAcc.setFont(fn);tAcc.setBorder(BorderFactory.createLineBorder(Color.BLACK, 3));tAcc.setForeground(Color.DARK_GRAY);conn2.add(tAcc);//Account password textField and labellPass = new JLabel("ACCOUNT PASSWORD");lPass.setBounds(90, 160, 380, 20);lPass.setFont(fn);conn2.add(lPass);tPass = new JTextField();tPass.setBounds(90,200,200,50);tPass.setFont(fn);tPass.setBorder(BorderFactory.createLineBorder(Color.BLACK, 3));tPass.setForeground(Color.DARK_GRAY);conn2.add(tPass);AccAddBtn = new JButton("STORE");AccAddBtn.setBounds(120, 290, 150, 50);conn2.add(AccAddBtn);GUIButtonsSetting(AccAddBtn);}//for password generator and encryptionpublic void textArea(String Pass,JTextArea TA){TA.setText(Pass);Font fn = new Font("MV Boli", Font.BOLD, 20);TA.setWrapStyleWord(true);TA.setLineWrap(true);TA.setCaretPosition(0);TA.setEditable(false);TA.setFont(fn);}//GUI of Password ManagerPasswordManager() {frame = new JFrame("Password Manager");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(400,650);frame.setResizable(false);ImageIcon img = new ImageIcon("background.png");background = new JLabel("",img,JLabel.CENTER);background.setBounds(0,0,400,650);background.setVisible(true);frame.add(background);FrameGUI(frame);conn1 = frame.getContentPane();ContainerGUI(conn1);//Generator buttons settingsPassGeneBtn = new JButton("GENERATE PASSWORD");PassGeneBtn.setBounds(90, 20, 220, 40);conn1.add(PassGeneBtn);GUIButtonsSetting(PassGeneBtn);//generating passwordPassGeneBtn.addActionListener(e -> {if(PassGeneBtn ==e.getSource()){try{int len = Integer.parseInt(JOptionPane.showInputDialog("Enter the password length"));if(len>4){// password generator class referencePasswordGenerator pass = new PasswordGenerator();String passwd = pass.generatePassword(len);genePassArea = new JTextArea(5,4);textArea(passwd,genePassArea);JOptionPane.showMessageDialog(conn1,new JScrollPane(genePassArea),"Copy your password",JOptionPane.INFORMATION_MESSAGE);}else JOptionPane.showMessageDialog (conn1,"Password length must be greater than 8!","Invalid Input Error",JOptionPane.WARNING_MESSAGE);}catch(Exception ex){JOptionPane.showMessageDialog(conn1,"Write something","EXIT!",JOptionPane.ERROR_MESSAGE);}}});// add a encryption button and actionJButton EncryptBtn = new JButton("ENCRYPT Text");EncryptBtn.setBounds(90, 90, 220, 40);conn1.add(EncryptBtn);GUIButtonsSetting(EncryptBtn);EncryptBtn.addActionListener(e -> {if(EncryptBtn ==e.getSource()){try{String text = JOptionPane.showInputDialog("Enter the text to encrypt");String secretKey = JOptionPane.showInputDialog("Enter the secret key");if(text.length()>0 && secretKey.length()>0){// password generator class referenceCryptoUtil pass1 = new CryptoUtil();String passwd = pass1.encrypt(secretKey, text); // encrypting the textgenePassArea = new JTextArea(5,4); // text area for the encrypted texttextArea(passwd,genePassArea); // setting the text areaJOptionPane.showMessageDialog(conn1,new JScrollPane(genePassArea),"Copy your password",JOptionPane.INFORMATION_MESSAGE); // showing the encrypted text}else JOptionPane.showMessageDialog (conn1,"Write something","Invalid Input Error",JOptionPane.WARNING_MESSAGE);}catch(Exception ex){JOptionPane.showMessageDialog(conn1,"Write something","EXIT!",JOptionPane.ERROR_MESSAGE);}}});// add a decryption button and actionJButton DecryptBtn = new JButton("DECRYPT Text");DecryptBtn.setBounds(90, 160, 220, 40);conn1.add(DecryptBtn);GUIButtonsSetting(DecryptBtn);DecryptBtn.addActionListener(e -> {if(DecryptBtn ==e.getSource()){try{String text = JOptionPane.showInputDialog("Enter the text to decrypt"); // getting the encrypted textString secretKey = JOptionPane.showInputDialog("Enter the secret key"); // getting the secret keyif(text.length()>0 && secretKey.length()>0) // checking if the text and secret key is not empty{// password generator class referenceCryptoUtil pass1 = new CryptoUtil(); // creating a object of the CryptoUtil classString passwd = pass1.decrypt(secretKey, text); // decrypting the textgenePassArea = new JTextArea(5,4); // text area for the decrypted texttextArea(passwd,genePassArea); // setting the text areaJOptionPane.showMessageDialog(conn1,new JScrollPane(genePassArea),"Decrypted text",JOptionPane.INFORMATION_MESSAGE); // showing the decrypted text}else JOptionPane.showMessageDialog (conn1,"Password length must be greater than 8!","Invalid Input Error",JOptionPane.WARNING_MESSAGE);}catch(Exception ex){JOptionPane.showMessageDialog(conn1,"Write something","EXIT!",JOptionPane.ERROR_MESSAGE);}}});//storing password using hashtablePassStoreBtn = new JButton("STORE PASSWORD");PassStoreBtn.setBounds(90, 230, 220, 40);conn1.add(PassStoreBtn);GUIButtonsSetting(PassStoreBtn);//Store password actionPassStoreBtn.addActionListener(e -> {if(PassStoreBtn ==e.getSource()){try{StoringGUI();// action on the Store btnAccAddBtn.addActionListener(e4 -> {if (AccAddBtn == e4.getSource()) {String account_name = tAcc.getText(); // getting the account nameString acc_pass = tPass.getText(); // getting the passwordif (account_name.isEmpty() && acc_pass.isEmpty()) {JOptionPane.showMessageDialog(conn2,"unable to store your password!","ERROR",JOptionPane.ERROR_MESSAGE);}else{//calling put method of the hashtablePassword classdata.add_Acc(account_name,acc_pass); // adding the account name and password to the hashtableJOptionPane.showMessageDialog(conn2, "Account added Successfully !");tAcc.setText(null);tPass.setText(null);}}});}catch(Exception ex) {JOptionPane.showMessageDialog(conn2,"Write something","EXIT",JOptionPane.ERROR_MESSAGE);}}});//searching passwordPassSearchBtn = new JButton("SEARCH PASSWORD");GUIButtonsSetting(PassSearchBtn);PassSearchBtn.setBounds(90, 300, 220, 40);conn1.add(PassSearchBtn);PassSearchBtn.addActionListener(e ->{if (PassSearchBtn ==e.getSource()){try{String acc_name = JOptionPane.showInputDialog("Enter your Account Name"); // getting the account nameif (!acc_name.isBlank()) { // checking if the account name is not emptyObject pass = data.get_Acc(acc_name.toLowerCase()); // getting the password of the account nameif(pass!=null) { // checking if the password is not nullsearchPassArea = new JTextArea(4,5); // text area for the passwordtextArea(String.valueOf(pass), searchPassArea); // setting the text areaJOptionPane.showMessageDialog(conn1, new JScrollPane(searchPassArea), "Copy your password", JOptionPane.INFORMATION_MESSAGE);}else JOptionPane.showMessageDialog(conn1, "Account not Found!");}}catch (Exception ex){JOptionPane.showMessageDialog(conn1,"Write something","EXIT",JOptionPane.ERROR_MESSAGE);}}});// deleting passwordPassDeleteBtn = new JButton("DELETE PASSWORD");GUIButtonsSetting(PassDeleteBtn);PassDeleteBtn.setBounds(90, 370, 220, 40);conn1.add(PassDeleteBtn);PassDeleteBtn.addActionListener(e -> {if (PassDeleteBtn == e.getSource()) {try {String acc_name = JOptionPane.showInputDialog("Enter the Account Name"); // getting the account nameif (!acc_name.isBlank()) {data.remove_Acc(acc_name.toLowerCase()); // removing the account name and password from the hashtableJOptionPane.showMessageDialog(conn1, "Delete successfully!"); // showing the message}else JOptionPane.showMessageDialog(conn1, "Account not found!", "INFO", JOptionPane.INFORMATION_MESSAGE);} catch (Exception ex) {JOptionPane.showMessageDialog(conn1, "Write something", "EXIT", JOptionPane.ERROR_MESSAGE);}}});addNoteBtn = new JButton("ADD NOTE");GUIButtonsSetting(addNoteBtn);addNoteBtn.setBounds(90, 440, 220, 40);conn1.add(addNoteBtn);addNoteBtn.addActionListener(e -> {if (addNoteBtn == e.getSource()) {try {NoteGUI();// action on the add note btnaddNote.addActionListener(e4 -> {if (addNote == e4.getSource()) {String note = tNote.getText(); // getting the noteif (note.isEmpty()) {JOptionPane.showMessageDialog(conn3, "unable to store your note!", "ERROR", JOptionPane.ERROR_MESSAGE);} else {//calling put method of the hashtablePassword classnotes.add(note); // adding the note to the arraylistJOptionPane.showMessageDialog(conn3, "Note added Successfully !");conn3.setVisible(false);tNote.setText(null);}}});} catch (Exception ex) {JOptionPane.showMessageDialog(conn3, "Write something", "EXIT", JOptionPane.ERROR_MESSAGE);}}});//get all notesJButton getNoteBtn = new JButton("GET NOTE");GUIButtonsSetting(getNoteBtn);getNoteBtn.setBounds(90, 510, 220, 40);conn1.add(getNoteBtn);getNoteBtn.addActionListener(e -> {if (getNoteBtn == e.getSource()) {try {String allNotes = notes.get(notes.size() - 1); // getting the last note addedif (allNotes.isEmpty()) { // checking if the note is empty or notJOptionPane.showMessageDialog(conn1, "No note found!", "INFO", JOptionPane.INFORMATION_MESSAGE); // showing the message} else {searchPassArea = new JTextArea(4, 5); // text area for the notetextArea(allNotes, searchPassArea); // setting the text areaJOptionPane.showMessageDialog(conn1, new JScrollPane(searchPassArea), "Get your notes", JOptionPane.INFORMATION_MESSAGE); // showing the message}} catch (Exception ex) {JOptionPane.showMessageDialog(conn1, "Add a note before trying to retrive", "EXIT", JOptionPane.ERROR_MESSAGE);}}});}// method for setting the buttons and GUI for adding notesprivate void NoteGUI() {conn3 = new JFrame("Add Note");conn3.setSize(500, 500);conn3.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);conn3.setLocationRelativeTo(null);conn3.setLayout(null);conn3.setVisible(true);conn3.setResizable(false);//add note labeladdNoteLabel = new JLabel("Add Note");addNoteLabel.setBounds(200, 20, 100, 30);conn3.add(addNoteLabel);//add note text areatNote = new JTextArea(10, 10);tNote.setBounds(100, 60, 300, 300);conn3.add(tNote);//add note buttonaddNote = new JButton("ADD NOTE");GUIButtonsSetting(addNote);addNote.setBounds(140, 380, 220, 30);conn3.add(addNote);}// main method to run the applicationpublic static void main(String[] args) {//loading screen classnew SplashScreen();try {new PasswordManager();}catch (Exception ex) { ex.printStackTrace(); }}}
Output for Password and Notes Manager in Java:
Image Output:

Video Output:
Conclusion
There we have it!! We just created a Password and Notes Manager in Java. Hope you enjoyed and learned something. You can further extend this project to storing more information about the user and also change the UI according to you.
Thank you for visiting our website.
Also Read:
- Dino Game in Java
- Java Games Code | Copy And Paste
- Supply Chain Management System in Java
- Survey Management System In Java
- Phone Book in Java
- Email Application in Java
- Inventory Management System Project in Java
- Blood Bank Management System Project in Java
- Electricity Bill Management System Project in Java
- CGPA Calculator App In Java
- Chat Application in Java
- 100+ Java Projects for Beginners 2023
- Airline Reservation System Project in Java
- Password and Notes Manager in Java
- GUI Number Guessing Game in Java
- How to create Notepad in Java?
- Memory Game in Java
- Simple Car Race Game in Java
- ATM program in Java
- Drawing Application In Java
- Tetris Game in Java
- Pong Game in Java
- Hospital Management System Project in Java
- Ludo Game in Java
- Restaurant Management System Project in Java
- Flappy Bird Game in Java
- ATM Simulator In Java
- Brick Breaker Game in Java
- Best Java Roadmap for Beginners 2023
- Snake Game in Java