The problem
Emailing sensitive documents as attachments is still the default in most colleges and small offices — and it is a bad one: attachments live forever in inboxes, get forwarded accidentally, and nobody can revoke them. Expiring-link sharing fixes the core problem by making access temporary by design. This project builds that properly, not as a toy uploader: files are encrypted client-side with AES-256 before they ever reach the server, each share link is a cryptographically signed token carrying its own expiry timestamp, and the server rejects expired or revoked tokens without needing cleanup jobs. Around that core sit the features a real product needs — password-protected links, burn-after-reading, per-link download counters and a full access log showing every download, expiry and failed password attempt.
Encrypts files locally in the browser and creates expiring share links.
Follow the working sequence
How it works
- The user drops files into the browser; each file is encrypted locally with a random AES-256 key (WebCrypto API) before any byte leaves the machine.
- The encrypted blob uploads in chunks with progress tracking; the server stores ciphertext plus metadata (name, size, content type) — never the key or plaintext.
- On "Create link", the server issues a signed token (HMAC) embedding the file ID, expiry timestamp, password flag and burn flag; the decryption key travels only in the link fragment, which the server never receives.
- A recipient opening the link gets the ciphertext and decrypts it in their own browser using the fragment key; the server checks the token signature and expiry first.
- Every access attempt — success, expired token, wrong password — is appended to the link's access log.
- A scheduled sweeper deletes expired ciphertext; burn-after-reading links delete on first successful download.
Tech stack:
- Node.js, Express
- WebCrypto AES-256-GCM (client-side)
- HMAC-signed URL tokens
- bcrypt (password hashing)
- PostgreSQL (metadata + logs)
- Chunked resumable uploads
- Docker (deployment)
- HTML/CSS/JavaScript UI
| Parameter | Value |
|---|---|
| Encryption | AES-256-GCM, client-side (WebCrypto) |
| Link tokens | HMAC-signed, expiry embedded |
| Max file size | 2 GB per file (design target) |
| Expiry options | 1 hour / 24 hours / 7 days |
| Password hashing | bcrypt, cost factor 12 |
| Upload | Chunked, resumable, with progress |
| Storage | Ciphertext only on server |
| Deployment | Docker Compose (app + PostgreSQL) |
Project features
- [Client-side encryption] Files are encrypted with AES-256 in the browser before upload — the server stores only ciphertext and never sees plaintext.
- [Expiring share links] 1-hour, 24-hour or 7-day expiries; each link is a signed token with an absolute expiry the server enforces on every request.
- [Password protection] Optional per-link passwords with server-side bcrypt hashing and rate-limited attempts.
- [Burn after reading] Single-download links that delete the file permanently after the first successful retrieval.
- [Access logs] Every download, expiry, failed password attempt and revocation is logged with timestamp and location for the link owner.
- [Instant revocation] Kill any link immediately from the dashboard; in-flight downloads are cut off.
- [Drag-and-drop uploads] Multi-file queue with progress bars, resumable chunked uploads for large files.
What is included
- Complete full-stack source code (client + server)
- Client-side encryption and signed-token implementation
- Access-log and revocation dashboard
- Security design document (threat model, key handling, token design)
- Deployment guide (VPS, HTTPS, storage sizing)
- Project report PDF (background, cryptography choices, architecture, testing)
- PPT presentation for final review
- Viva Q&A preparation document (AES-GCM, HMAC tokens, bcrypt, threat model)
Limitations & prerequisites
- The fragment-key design means losing the full link loses the file permanently — there is no recovery, which the UI states clearly.
- 2 GB max file size and the stated expiries are design targets — the report documents the load/limits test actually run for the order.
- Client-side encryption protects file contents, not metadata (filenames, sizes remain visible to the server).
- Password attempts are rate-limited but the app does not include full account-based 2FA; recipients need no account by design.
- Malware scanning of uploads is out of scope and listed as future work.
Frequently Asked Questions
How is this different from Google Drive links?
Drive links don't expire on their own and Google holds your plaintext. Here every link carries its own expiry, files are encrypted before upload so the server can't read them, and burn-after-reading deletes after one download.
If the server is breached, are files safe?
The server stores only AES-256-GCM ciphertext; decryption keys live in link fragments that never reach the server. An attacker gets encrypted blobs and salted password hashes — the threat model in the report walks through this.
How do expiring links actually work?
Each link token is HMAC-signed and embeds an absolute expiry timestamp. The server verifies the signature and rejects expired tokens on every request — no cron job needed to "turn links off".
What happens if I forget a link password?
The owner can revoke the link and create a new one; passwords are bcrypt-hashed and cannot be recovered, which the UI explains upfront.
Can recipients download without an account?
Yes — by design. The link (plus password, if set) is the entire credential, which is why expiry and revocation exist.
Is this project suitable for a final-year project?
Yes — for Computer Science, IT and Web Development programs. It demonstrates applied cryptography, security design, full-stack development and a genuinely usable product. Suitable for B.E./B.Tech final-year projects in Computer Science, IT and Web Development.
Components & software requirements
- Node.js, Express
- WebCrypto AES-256-GCM (client-side)
- HMAC-signed URL tokens
- bcrypt (password hashing)
- PostgreSQL (metadata + logs)
- Chunked resumable uploads
- Docker (deployment)
- HTML/CSS/JavaScript UI
Delivery information
Built-to-order project. Delivery timeline is shared after order confirmation based on current queue.
Support terms
Complete documentation, setup guide, and viva preparation included. Support for setup and explanation provided.
Download free synopsis (PDF)
Enter your name and WhatsApp number — the synopsis PDF downloads immediately. We may send occasional project updates on WhatsApp; no spam.