Django Secret Key Generator
Generate a Django SECRET_KEY using the same character set as Django's startproject — 50 random chars.
Security note
Never commit your SECRET_KEY to version control. Store it in an environment variable or a secrets manager and load it via os.environ.get("DJANGO_SECRET_KEY"). Generated locally — never transmitted.
Why does Django need a SECRET_KEY?
Django's SECRET_KEYis used to provide cryptographic signing for sessions, CSRF tokens, password reset links, and other security primitives. A weak or leaked key puts your entire application at risk — attackers could forge signed cookies, bypass CSRF protection, or enumerate password reset tokens. Django's own startproject command uses a 50-character key drawn from the same charset used here. This generator uses crypto.getRandomValues for true cryptographic randomness so no two keys are alike.
Built and maintained by Meet Shah · Last updated
What this tool is used for
- Producing a key for a new project rather than keeping the one `startproject` generated.
- Rotating a key that has been committed to a repository.
- Generating distinct keys per environment so a staging leak cannot forge production sessions.
- Producing a key in the exact character set Django's own command uses.
- Replacing a key after a suspected compromise.
Frequently Asked Questions
- Is this the same key Django would generate?
- Yes — the same 50 characters drawn from the same 50-character alphabet Django's get_random_secret_key uses: lowercase letters, digits and fourteen symbols. No uppercase, which surprises people; Django simply never included it, and matching the alphabet exactly is the point of the tool.
- How strong is a Django secret key?
- About 282 bits of entropy — 50 characters from a 50-symbol alphabet is 50 × log₂(50). That is far beyond brute force and well past the 256-bit level usually quoted for long-term security, so the key is never the weak link; how you store it is.
- What actually breaks if the key leaks?
- More than sessions. SECRET_KEY signs session cookies, password-reset tokens, the CSRF token and anything using Django's signing framework — so a leaked key lets an attacker forge a password-reset link for any account. Treat exposure as a full credential compromise, not a cookie problem.
- What happens when I rotate it?
- Every signed value becomes invalid at once: all sessions log out, in-flight password-reset links stop working, and pending signed URLs break. Django supports SECRET_KEY_FALLBACKS so old keys keep validating during a transition — use it to rotate without logging your entire user base out.
- Where should the key live?
- In the environment, never in settings.py and never in git. The default startproject file contains a real key with a comment telling you to keep it secret, which is exactly how so many keys end up in public repositories — read it from an environment variable and let deployment supply the value.
Common errors and gotchas
- Committing the key to version control, which is the single most common Django deployment mistake.
- Reusing one key across environments, so a staging leak compromises production sessions.
- Rotating the key without warning anyone, which invalidates every active session and signed value.
- Assuming it only affects sessions, when it also signs password reset tokens and cookies.
- Leaving the development key in place in production.