A cryptographically strong password generator powered by real-world entropy — not
Math.random().
Most password generators call Math.random() and call it a day. This one fuses 13 real-world entropy signals into a SHA-256 hash every single time you click generate — no reuse, no shortcuts.
Every click collects fresh chaos from all of these simultaneously:
| Source | Signal |
|---|---|
performance.now() |
Sub-millisecond high-resolution timing jitter |
Date.now() |
Current timestamp |
crypto.getRandomValues() |
128 bytes of CSPRNG output |
navigator.hardwareConcurrency |
CPU core count fingerprint |
navigator.deviceMemory |
Device RAM fingerprint |
navigator.platform |
OS/platform string |
navigator.language |
Browser language setting |
| Screen resolution + color depth | Display fingerprint |
| Intl timezone | Timezone fingerprint |
| Network round-trip latency | Live-measured fetch timing |
| Mouse movement buffer | Up to 256 recent (x, y, t, dx, dy) tuples |
| Performance navigation entries | Browser session state |
| Window inner dimensions | Viewport size |
All 13 sources are serialized → hashed with SHA-256 via the Web Crypto API → converted to a password using a counter-based CSPRNG (no Math.random() anywhere in the pipeline).
🔐 Password Generation
- Guaranteed mix of uppercase, lowercase, digits, and symbols
- Fisher-Yates shuffle seeded from a second SHA-256 pass
- Adjustable length from 6 to 64 characters
- Fresh entropy collected on every single click
👁 Show / Hide Toggle
- Password is masked by default after generation
- Eye icon to reveal / re-mask instantly
🔥 Burn After Reading
- Copy the password → a 30-second countdown begins
- Color-coded urgency: yellow → orange → red as time runs out
- Password auto-wipes at zero — cancel anytime
📊 Live Entropy Dashboard
- Mouse entropy activity bar (live, decays when idle)
- Network latency display (measured on each generate)
- Active entropy sources count with hover popover listing all 13 sources
⏱ Crack Time Estimator
- Calculates entropy bits from charset pool × length
- Estimates time-to-crack at 100 billion guesses/sec (GPU cluster)
- Color-coded: red (instantly) → green (centuries) → purple glow (longer than the universe)
🎨 Color-Zoned Slider
- Red/Orange: 6–12 chars — Weak
- Purple: 13–30 chars — Strong
- Deep Purple: 30–64 chars — Fortress
🌗 Light & Dark Mode
- Toggle in the top bar
- Smooth transitions throughout
- No backend. Everything runs in your browser.
- No data transmitted. Passwords never leave your device.
- No storage. Nothing is written to localStorage, cookies, or any persistent store.
- No
Math.random(). The entire pipeline usescrypto.getRandomValues()andcrypto.subtle.digest(). - No dependencies beyond React and Tailwind-compatible styles.
- React 18 — UI and state
- Web Crypto API — SHA-256 hashing + CSPRNG bytes
performance.now()— High-resolution timing entropy- Fetch API — Network latency measurement
- Mouse events — Live entropy buffer collection
- Fully client-side — deployable on any static host
# Clone the repo
git clone https://github.com/dotAadarsh/not-another-password-generator.git
cd not-another-password-generator
# Install dependencies
npm install
# Start dev server
npm run devThen open http://localhost:5173.
npm run buildThe output in dist/ is a fully static site — drop it on GitHub Pages, Vercel, Netlify, or anywhere.
┌─────────────────────────────────────────────┐
│ 13 Real-World Signals │
│ timestamps · crypto bytes · hardware · │
│ network latency · mouse buffer · screen … │
└────────────────────┬────────────────────────┘
│ JSON.stringify + perf.now()
▼
┌─────────────────┐
│ SHA-256 Hash │ (Web Crypto API)
└────────┬────────┘
│ Uint8Array[32]
▼
┌────────────────────────┐
│ Counter-based CSPRNG │
│ Re-hash per character │
└────────────┬───────────┘
│
▼
┌────────────────────────┐
│ Fisher-Yates Shuffle │ (seeded from 2nd SHA-256 pass)
└────────────┬───────────┘
│
▼
Strong Password ✓
MIT — do whatever you want with it.
Built by @dotAadarsh