How to use
- Secretotpauth:// URI
Enter the secret (Base32)
- 6-digit codeupdates every step
Compute the code from the time
- QR image (PNG)Check against RFC values
Check with a QR or values
Click “Try a sample” or enter a Base32 secret (“Generate random” makes a fresh one).
Choose TOTP or HOTP, the algorithm (SHA-1 / SHA-256 / SHA-512), digits and period (or counter for HOTP) to match the service you are checking.
The current code and the seconds left are shown. Raise “Steps either side” to list the codes of neighbouring time steps too.
The otpauth:// URI and QR code appear only after you click “Show secret”. You can copy the URI or save the QR as PNG.
Paste an existing otpauth:// URI or load a QR image to fill in the issuer, account, algorithm, digits and period.
Use “Check against RFC test vectors” to confirm this tool’s maths matches the official RFC 4226 / 6238 values.
What it does
Self-test against the RFC vectors
Computes all 28 official values in your browser and compares them: RFC 4226 Appendix D (HOTP counters 0–9) and RFC 6238 Appendix B (TOTP, SHA-1 / SHA-256 / SHA-512 at six times).
See clock drift
Shows the seconds left and the codes up to ±5 steps around now, so you can find which step matches the other side when a device clock runs fast or slow. You can also set the time as Unix seconds.
Build and read otpauth://
Create a URI and QR code (saved as PNG) from issuer, account, algorithm, digits and period (or counter for HOTP). Existing URIs and QR images are broken down field by field.
Built so the secret stays local
The secret is masked by default. Input and HMAC run entirely in your browser with Web Crypto; nothing is sent, put in the URL or saved in browser storage. Analytics never include the secret or URI.
Google Authenticator export QR
An otpauth-migration:// QR (the export format) is listed account by account when it can be read, and you can load one account into the form. Unsupported entries such as MD5 are not imported.
Use cases
- Compare the codes your service’s 2FA implementation produces with another implementation
- Check the issuer, digits, period and algorithm inside a QR code’s otpauth:// before enrolling
- Tell whether a code mismatch comes from clock drift (the right code shows up in a neighbouring step)
- Build an otpauth:// URI and QR code for a test account in a development environment
- Step an HOTP counter to see how a server’s resynchronisation window behaves
Capability matrix
| Feature | Support | Notes |
|---|---|---|
| TOTP / HOTP code calculation (SHA-1, SHA-256, SHA-512; 6–8 digits) | Supported | — |
| Neighbouring codes, seconds left, time as Unix seconds | Supported | — |
| Build otpauth:// URIs, show the QR code, save as PNG | Supported | — |
| Read from QR images and URIs (issuer, account, algorithm, digits, period) | Supported | — |
| Read otpauth-migration:// (Google Authenticator export) | Partial | Only QR codes that can be read; entries such as MD5 and the other images of a multi-image export are not imported |
| Recover other services’ accounts or extract secrets from them | Not supported | This tool only computes and inspects codes; use each service’s own recovery process |
| Correct the device clock | Not supported | You can see the drift, but the clock itself must be fixed with your OS time sync |
| Steam Guard or other non-standard schemes, digits outside 6–8 | Not supported | Only schemes following RFC 4226 / 6238 |
Limits & notes
- Secrets up to 256 Base32 characters; otpauth:// URIs up to 4096 characters.
- Digits 6–8, TOTP period 5–300 seconds, and up to ±5 steps either side.
- QR images up to 10 MB. Decoding loads a WebAssembly module (ZXing) from this site.
- Codes use your device clock (or the Unix time you set). If the clock is off, the codes will differ from the authentication server’s.
- Entering a production secret carries the same risk as typing it into any third-party site; use a test secret where possible.
- Works on phones too. QR codes are read from an image file you choose.
Privacy & safety
Secrets, otpauth:// URIs and QR images are processed entirely in your browser (Web Crypto and WebAssembly) and never sent to a server. Nothing is written to the URL or browser storage, and everything is gone when you close the page. Analytics only receive usage counts and error types, never secrets or account names.
FAQ
How is a TOTP code calculated?
Why does my two-factor code not match?
What is inside a 2FA QR code?
How do I build an otpauth:// URI?
Is it safe to enter a production secret?
Can it recover my account on another service?
Related tools
Crypto Studio — Hash, HMAC, Encryption & Keys
Type text and see 12 hashes — SHA-256, SHA-3, BLAKE3 and more — at once. Verify webhook HMAC signatures, encrypt text with a password, generate key pairs and create or check bcrypt hashes, all on your own device with nothing uploaded.
QR & Barcode Studio
Build QR codes from templates for Wi-Fi, contacts, events and more, and barcodes such as EAN or Code 128 with automatic check digits. Export PNG or SVG, or batch-create one code per line.
QR Code & Barcode Reader
Drop an image or point your camera to read QR codes and barcodes. URLs are never opened automatically — you see the real destination domain and phishing warnings first. Everything runs on your device.
Password Studio — Generator & Strength Checker
A strong 20-character password is ready when the page opens. Fine-tune symbols and excluded characters, switch to a memorable passphrase, or check a password you already use — all without sending anything off your device.
Certificate, CSR & PEM Studio
Reads PEM, DER (.cer/.crt), CSR and PKCS#7 (.p7b) and lists the subject, expiry (days left), SANs, public key, signature algorithm and SHA-256 fingerprint. It also checks chain order and signatures and converts PEM and DER. Everything runs in your browser and private keys are never read.
Secret Scanner
Paste text or drop config and code files to list likely secrets with file, line and rule before you publish or share them. Values are masked by default and you can save a copy with them replaced by ***. A helper only — it cannot guarantee that nothing is missed.
Last updated: