Is it safe to paste my real 2FA secret here?
Nothing is sent, stored, or logged, and you can verify that in the Network tab. Still, a real seed belongs in your authenticator app; use a test secret here, and rotate a real one if you have any doubt.
Your secret never leaves this page.
Paste a base32 secret or an otpauth://totp/ URI and watch the codes change every period. Built for testing 2FA integrations, and verified in your browser against the published RFC 6238 test vectors.
Loading the toolbox.
You do not have to take our word that your secret stays here. Developer tools show every request a page makes, so you can watch this page work and confirm that nothing is sent. The check takes under a minute.
F12, or Cmd+Option+I on a Mac, and select the Network tab.Only two things can add a line to that log, and neither carries your secret. Submitting the feedback form sends the vote and comment you typed. Typing characters in a script the page has not displayed yet, such as Cyrillic or Greek, can make the browser fetch the matching font file, and that request names only the font.
The production site also sends a Content-Security-Policy header that tells your browser to refuse connections to anywhere except this site and the anonymous analytics endpoint, so a coding mistake could not quietly send your secret elsewhere.
TOTP, the time-based one-time password algorithm in RFC 6238, is what authenticator apps run. Your device and the server share a secret. Every period, usually 30 seconds, both compute the number of periods since 1970, run HMAC over that counter with the secret, take four bytes from a position chosen by the last byte of the result, and keep the last six or eight digits. Because both sides use the same secret and clock, they get the same code without talking to each other.
The secret is usually shared as base32 text or inside an otpauth:// URI encoded in a QR code. The URI can also set the algorithm, the number of digits, and the period.
A TOTP seed is a second factor: anyone who has it can produce your codes. So 2otp follows strict rules:
The original tool always used SHA-1, even when a URI asked for SHA-256 or SHA-512, so it showed wrong codes for those accounts. It also treated otpauth://hotp/ links as TOTP, and silently dropped mistyped characters such as 0, 1, and 8 from secrets, producing a wrong code without warning.
Now the algorithm is honored, HOTP links are refused with a clear message, and invalid base32 is reported. On every load, the page computes all eighteen RFC 6238 test vectors, six times for each of SHA-1, SHA-256, and SHA-512, and shows whether this browser gets them right.
Elsewhere in the toolbox: 2uuid, 2gitignore, 2csp, 2htaccess, and more on the 2toolbox home page. Part of the 2suite.io privacy-first ecosystem.
Nothing is sent, stored, or logged, and you can verify that in the Network tab. Still, a real seed belongs in your authenticator app; use a test secret here, and rotate a real one if you have any doubt.
HOTP codes depend on a counter that only the issuer and your app know. Guessing it would show misleading codes, so 2otp refuses rather than guesses.
The three RFC 6238 defines: SHA-1, SHA-256, and SHA-512, with 6, 7, or 8 digits and any period from 1 to 300 seconds.
It computes the eighteen published RFC 6238 test codes in your browser and compares them with the expected values.