Built to order

Secure Password Manager with AES Encryption

Zero-knowledge password vault with AES-256 encryption, a master-password key derivation, a password generator and an autofill browser extension.

Illustration of the VaultKey password manager with the encrypted vault, master-password unlock and browser extension.
More project photos (2)

The problem

Most people reuse a handful of weak passwords across dozens of accounts, so one breached site hands attackers the keys to everything else. The fix is well known — a unique, strong password per site — but human memory cannot hold two hundred random strings, and sticky notes or spreadsheets are worse than the disease. Password managers solve the memory problem, but building one properly is a serious cryptography exercise: credentials must be encrypted with authenticated encryption, the master password must be stretched through a slow key-derivation function, and the architecture should be zero-knowledge so a server breach leaks only ciphertext. A browser extension that autofills logins completes the usability loop. This project turns those abstract requirements into a working vault students can actually audit and demo.

How it works

On first run, you create a master password; VaultKey derives a 256-bit key from it using PBKDF2 (high iteration count) with a random salt.
Every credential you save is encrypted with AES-256 (GCM) using a fresh random IV per entry, then synced to the server as ciphertext only.
Unlocking re-derives the key from the master password locally — the key never leaves your device and the server can't decrypt anything.
The password generator uses a cryptographically secure RNG; generated passwords show an entropy estimate in bits.
The breach checker hashes your password and compares it against known-compromised lists, warning you without exposing the password.
The browser extension detects login forms, offers matching vault entries and autofills them after you unlock.
Auto-lock and clipboard clearing ensure decrypted data doesn't linger on a shared machine.

Project features

AES-256 encrypted vault (CBC/GCM modes) holding logins, notes and card details
Master-password unlock with PBKDF2/bcrypt key derivation and configurable iterations
Zero-knowledge design — the server stores only ciphertext, never keys or plaintext
Cryptographically strong password generator with length, charset and entropy display
Breach-check warnings flagging passwords found in known leak datasets
Browser extension (JavaScript) for one-click autofill on login forms
Auto-lock timer, clipboard auto-clear and session timeout for shoulder-surfing protection
Search, folders/tags and favorites for organizing hundreds of credentials
Encrypted backup export/import for moving the vault between devices
Password health dashboard: weak, reused and old passwords flagged for rotation

What is included

Complete, commented source code (vault app + API + browser extension)
Project report PDF (cryptography theory, threat model, design, testing, conclusion)
PPT presentation
Viva Q&A preparation document (AES modes, KDFs, zero-knowledge, entropy, extension security)
Setup guide (installation, vault creation, extension setup, demo walkthrough)

FAQs

  1. What does zero-knowledge mean here? The server only ever sees ciphertext. Encryption keys are derived from your master password on your device and are never stored or transmitted, so nobody — not even the service operator — can read your passwords.
  2. Which AES mode does it use? GCM (authenticated encryption) by default, with CBC as a documented fallback. The report explains why authenticated encryption matters and how per-entry IVs are handled.
  3. What happens if the master password is forgotten? The vault cannot be recovered — the honest trade-off of zero-knowledge design, with no backdoor and no reset.
  4. Can the full flow be demoed? Yes. Create a vault, save logins, generate a password, run a breach check and autofill a demo login page with the extension in one session.
  5. Why PBKDF2 with 600,000+ iterations? The high iteration count makes each password guess expensive, which is what slows down brute-force attacks against a stolen vault file. The iteration count is configurable.

Limitations & prerequisites

Security is only as strong as the master password — a weak master password undermines the whole vault; a strength meter is enforced at setup.
If you forget the master password, the vault cannot be recovered — zero-knowledge means no backdoor and no reset.
The extension autofills only standard HTML login forms; exotic CAPTCHA or MFA flows still need manual steps.
Breach checking depends on available leak datasets and an internet connection.

Components & software requirements

Python or Node.js back end (API serving ciphertext blobs only)
AES-256 (Fernet / WebCrypto API) with GCM/CBC modes, random IV per entry
PBKDF2 / bcrypt key derivation from the master password
SQLite (local vault) + server-side blob store
Browser extension in vanilla JavaScript (Chrome/Firefox manifest)
zxcvbn-style strength meter and entropy estimation for the generator

Specifications

Parameter Value
Encryption AES-256 (GCM preferred; CBC fallback), fresh random IV per entry
Key derivation PBKDF2 with SHA-256, random salt, configurable iterations (default 600k+)
Zero-knowledge Server stores ciphertext only; keys derived client-side, never transmitted
Generator CSPRNG-based, configurable length/charset, entropy shown in bits
Breach check Hash-prefix comparison against compromised-password datasets
Extension Chrome/Firefox manifest; form detection + autofill after unlock
Auto-lock Configurable inactivity timeout; clipboard auto-clears after N seconds
Health dashboard Weak, reused, duplicated and aged passwords flagged
Backup Encrypted export/import of the full vault (portable file)
Storage SQLite locally; optional server sync of ciphertext blobs

Download abstract (PDF)

Related guides

All guides
Illustration of JWT authentication: a brass key handing a glowing sealed token to a server rack and a laptop login screen, linked by a chain motif.B.E./B.Tech Computer Science and IT students adding login and protected APIs to their final-year web projects

JWT Authentication for Students: Tokens, Signatures, Refresh Flows and a Node.js Implementation

How does JWT login actually work? When a user logs in, the server issues a signed token in three parts — header, payload, signature. The client sends it back as an Authorization: Bearer header, and the server verifies the signature instead of looking up a session. This guide decodes a real token by hand, walks through the full login and refresh flow, and builds a working Node.js implementation with bcrypt password hashing, token rotation, and storage rules that survive a viva.

Read guide
Illustration of SQL versus NoSQL: neat filing-cabinet table rows on one side against flexible nested document cards on the other, joined by dotted lines.B.E./B.Tech Computer Science and IT students choosing and designing the database for their final-year project

SQL vs NoSQL for Final-Year Projects: Which Database Should You Pick?

MySQL or MongoDB for your final-year project? SQL databases store data in related tables with enforced schemas, joins and transactions — the right default when your data is structured and money or records must stay consistent. NoSQL document stores trade the rigid schema for flexible, nested documents that ship faster when your data shape keeps changing. This guide compares them with a worked hospital-appointment example in both, a decision table, and rules matched to common project archetypes.

Read guide
Editorial illustration of shipping containers transforming into glowing software windows beside a laptop showing container layers, in blue and teal tones.B.E./B.Tech Computer Science and IT final-year students shipping web/backend projects

Docker for Student Projects: Images, Containers and Compose from Zero

End ‘it works on my machine’ failures: learn what Docker images and containers actually are, write lean Dockerfiles that exploit layer caching, persist data with volumes, orchestrate app-plus-database with Compose, and package an evaluator-proof submission — with the debugging table for every error you will definitely meet.

Read guide
Get a quotation