About GenerateKey
What this site is, who made it, and how to check it does what it claims.
What it is
GenerateKey is a set of generators for the random values developers actually need — passwords, Diceware passphrases, UUIDs, hex and base64 secrets, JWT and framework secrets, SSH and WireGuard keys, and more. Every one runs entirely in your browser through the Web Crypto API (crypto.getRandomValues and crypto.subtle). There is no server-side generation, no account, no cookie, no ad, and nothing that records a generated value. The only network traffic after the page loads is a self-hosted, cookie-less page-view count that stores which generator type was copied — never the value.
How to verify that, in five seconds
Don't take our word for it. Turn off your wifi and press generate — every generator keeps working, because the randomness comes from your own device, not a server. For the thorough version, open your browser's Network tab and press generate: you will see no request at all. And you can read the exact JavaScript this page runs — it is served unminified, and it is the entire program. This is the same argument spelled out on is it safe to use an online password generator.
What we actually checked
The correctness claims here are measured, not asserted. Every generator draws with rejection sampling, so there is no modulo bias — a chi-square goodness-of-fit test over 500,000 draws confirms uniformity at alphabet sizes 10, 32, 50 and 64, where the naive byte % n that many online generators ship fails badly for sizes that do not divide 256 (Django's 50-character alphabet is the textbook case). A browser-generated WireGuard key pair was re-derived out of band and matches wg genkey byte for byte. The base32 encoder passes all six RFC 4648 §10 test vectors. The framework secrets reproduce each framework's own output: Laravel's base64: key, Django's 50-character charset, Rails' 128 hex characters, a NextAuth AUTH_SECRET in standard base64.
The honest limits
Client-side generation moves the trust question, it does not remove it. You are trusting that the code served to you does what it claims, and the page is re-fetched on every visit — so a malicious operator, or anyone who compromises the DNS or CDN, could serve different code tomorrow. That is why a secret protecting something irreplaceable should be generated with a tool you installed, why the SSH page tells you to prefer ssh-keygen for a production key, and why this site will never publish a crypto-wallet seed-phrase generator. The threat model scales with the value of the secret, and we would rather say so than pretend otherwise.
Who made it, and how to reach us
Built by maxbook. If you find a security or correctness problem, email max@maxken.fr — there is a security.txt with the same contact.
Nothing leaves your browser
- Don't take our word for it — turn off your wifi. Every generator on this site keeps working with the network disconnected. That's the whole proof, and it takes five seconds.
- Every value comes from
crypto.getRandomValues()— the CSPRNG built into your browser, neverMath.random(). - Generated secrets are never transmitted, logged or stored: no server-side generation, no cookies, no localStorage.
- Verify it yourself in the network tab: after loading, the page only talks to our self-hosted, cookie-less analytics — which counts page views and which generator type gets copied, never any value.
- Strict Content-Security-Policy; no third-party script origins.
All generators
- Base64 Secret Generator
- UUID Generator
- Password Generator
- Hex Secret Generator
- JWT Secret Generator
- Passphrase Generator
- SSH Key Generator (Ed25519)
- PIN Generator
- WireGuard Key Generator
- API Key Generator
- TOTP Secret Generator
- Django SECRET_KEY Generator
- Laravel APP_KEY Generator
- NextAuth Secret Generator
- Flask SECRET_KEY Generator
- Rails secret_key_base Generator
- Strapi APP_KEYS Generator
- ULID Generator
- Nano ID Generator