Password Manager with Encryption using Python Tkinter | Save & Decrypt Passwords Securely

 Demo :


Click Video πŸ‘‡πŸ‘‡πŸ‘‡
















πŸ“Œ Post Features to Add:

  • πŸ“ Folder Structure

  • 🧠 Features List

  • πŸ’‘ How it Works

  • πŸ”§ Setup Instructions

  • πŸ–Ό Screenshots (App UI Preview)

  • ▶ Embedded YouTube Shorts (Both)

  • πŸ“₯ Download Source Code Button

  • πŸ”— GitHub / External Hosting if available

  • 🧩 Tags and SEO meta for discoverability


Code :


import tkinter as tk

from tkinter import messagebox, ttk

import sqlite3

from cryptography.fernet import Fernet, InvalidToken

import pyperclip

import os


# πŸ”‘ Key Load/Save

def load_or_create_key():

    if os.path.exists("key.key"):

        with open("key.key", "rb") as file:

            return file.read()

    else:

        key = Fernet.generate_key()

        with open("key.key", "wb") as file:

            file.write(key)

        return key


KEY = load_or_create_key()

cipher = Fernet(KEY)


def encrypt_password(password):

    return cipher.encrypt(password.encode()).decode()


def decrypt_password(encrypted_password):

    try:

        return cipher.decrypt(encrypted_password.encode()).decode()

    except InvalidToken:

        return "❌ Invalid or corrupted password"


# πŸ“‚ DB Setup

def setup_db():

    conn = sqlite3.connect("passwords.db")

    cursor = conn.cursor()

    cursor.execute('''CREATE TABLE IF NOT EXISTS passwords (

                        id INTEGER PRIMARY KEY AUTOINCREMENT,

                        website TEXT,

                        username TEXT,

                        password TEXT)''')

    conn.commit()

    conn.close()


setup_db()


# πŸ”’ Save Password

def save_password():

    website = website_entry.get()

    username = username_entry.get()

    password = password_entry.get()


    if not website or not username or not password:

        messagebox.showerror("Error", "All fields are required!")

        return


    encrypted_password = encrypt_password(password)


    conn = sqlite3.connect("passwords.db")

    cursor = conn.cursor()

    cursor.execute("INSERT INTO passwords (website, username, password) VALUES (?, ?, ?)",

                   (website, username, encrypted_password))

    conn.commit()

    conn.close()


    messagebox.showinfo("Success", "Password saved successfully! ✅")

    website_entry.delete(0, tk.END)

    username_entry.delete(0, tk.END)

    password_entry.delete(0, tk.END)

    load_passwords()


# πŸ”ƒ Load Entries

def load_passwords():

    tree.delete(*tree.get_children())

    conn = sqlite3.connect("passwords.db")

    cursor = conn.cursor()

    cursor.execute("SELECT id, website, username, password FROM passwords")

    records = cursor.fetchall()

    conn.close()


    for record in records:

        tree.insert("", tk.END, values=(record[0], record[1], record[2], "●●●●●", record[3]))  # 5th column = real encrypted password (hidden)


# πŸ‘ View Password

def view_password():

    selected_item = tree.selection()

    if not selected_item:

        messagebox.showerror("Error", "Please select an entry")

        return


    item = tree.item(selected_item)

    encrypted_password = item['values'][4]  # hidden encrypted password

    decrypted_password = decrypt_password(encrypted_password)


    if decrypted_password == "❌ Invalid or corrupted password":

        messagebox.showerror("Error", "This password cannot be decrypted!")

    else:

        messagebox.showinfo("Decrypted Password", f"Password: {decrypted_password}")

        pyperclip.copy(decrypted_password)


# πŸ—‘ Delete Entry

def delete_password():

    selected_item = tree.selection()

    if not selected_item:

        messagebox.showerror("Error", "Please select an entry")

        return


    item = tree.item(selected_item)

    id_to_delete = item['values'][0]


    conn = sqlite3.connect("passwords.db")

    cursor = conn.cursor()

    cursor.execute("DELETE FROM passwords WHERE id = ?", (id_to_delete,))

    conn.commit()

    conn.close()


    load_passwords()

    messagebox.showinfo("Success", "Password deleted successfully! ✅")


# 🎨 GUI

root = tk.Tk()

root.title("πŸ” Password Manager")

root.geometry("500x500")

root.configure(bg="#222")


style = ttk.Style()

style.configure("TButton", padding=6, font=("Arial", 12), background="#444", foreground="white")

style.configure("Treeview", background="#333", foreground="white", rowheight=25)


frame = tk.Frame(root, bg="#222")

frame.pack(pady=20)


tk.Label(frame, text="🌐 Website:", fg="white", bg="#222").grid(row=0, column=0, padx=5, pady=5)

website_entry = tk.Entry(frame, width=30)

website_entry.grid(row=0, column=1, padx=5, pady=5)


tk.Label(frame, text="πŸ‘€ Username:", fg="white", bg="#222").grid(row=1, column=0, padx=5, pady=5)

username_entry = tk.Entry(frame, width=30)

username_entry.grid(row=1, column=1, padx=5, pady=5)


tk.Label(frame, text="πŸ”‘ Password:", fg="white", bg="#222").grid(row=2, column=0, padx=5, pady=5)

password_entry = tk.Entry(frame, width=30, show="*")

password_entry.grid(row=2, column=1, padx=5, pady=5)


save_button = ttk.Button(root, text="πŸ’Ύ Save Password", command=save_password)

save_button.pack(pady=5)


# Treeview setup (extra column for encrypted password, but not shown)

columns = ("ID", "Website", "Username", "Password", "Encrypted")

tree = ttk.Treeview(root, columns=columns, show="headings")

tree.heading("ID", text="ID")

tree.heading("Website", text="Website")

tree.heading("Username", text="Username")

tree.heading("Password", text="Password")

tree.heading("Encrypted", text="Encrypted")  # hidden


tree.column("Encrypted", width=0, stretch=False)  # Hide this column

tree.pack(pady=10)


view_button = ttk.Button(root, text="πŸ” View Password", command=view_password)

view_button.pack(pady=5)


delete_button = ttk.Button(root, text="πŸ—‘ Delete Entry", command=delete_password)

delete_button.pack(pady=5)


load_passwords()

root.mainloop()


πŸ” Build your own Secure Password Manager using Python and Tkinter with full encryption support.  

This beginner-friendly app lets you save, encrypt, decrypt, and manage all your passwords with ease.  

Perfect for Python learners, mini-project creators, and those looking for real-world GUI projects.  


πŸ‘¨‍πŸ’» Developed by Fuzzu Developer | Modern UI + Security πŸ”   

Comments

Popular posts from this blog

πŸš€ Simple Login & Registration System in Python Tkinter πŸ“±

πŸš€ Create a Python Screen Recorder with Audio (Complete Code)

πŸ“‘ Fuzzu Packet Sniffer – Python GUI for Real-Time IP Monitoring | Tkinter + Scapy