Batch Password Generator
Many passwords, one-time links
A batch password generator produces many random passwords or passphrases in one run instead of one at a time. Our batch generator makes 1 to 50 values with the same options as the single password and passphrase generators, shows the entropy of each one in bits, and can wrap every value in a one-time link that is encrypted in your browser and destroyed after it has been opened. Copy the list, copy it as CSV, or download the CSV file.
Characters to leave out of every password (useful for avoiding ambiguous characters)
What is a batch password generator for?
A batch password generator is for the moments when one password is not enough. The same three jobs come up again and again:
- Onboarding many accounts at once. A new class, a new team, a new customer with 40 seats. Each account needs its own initial password, and generating them one by one on a single-password page means 40 round trips and 40 chances to reuse one by mistake.
- Handing out initial passwords. Help desks and IT teams issue temporary passwords that the user must change on first login. The batch generator makes the whole set, and the one-time links make sure each person gets only their own and can tell whether anyone opened it first.
- Seeding a password manager. When you move a shared vault to unique credentials, or rotate every service account after a departure, you need a stack of strong values ready to paste. Generate 50, import the CSV, then rotate each service in turn.
Every value in a batch is generated independently by advanced cryptographic random generation, so the entropy beside each row is the entropy of that value alone. A 16-character password over the full 88-character set is about 103 bits. A 4-word passphrase from the EFF short wordlist is 41.4 bits and an 8-word passphrase is 82.7. The password and passphrase options work exactly as they do on the password generator and the passphrase generator, so whatever policy you settled on there applies to the whole batch. Nothing generated is stored or logged.
Why do one-time links beat pasting passwords in a spreadsheet or chat?
The usual way to distribute a batch of passwords is a spreadsheet with a name in one column and a password in the next, shared by email or dropped into a chat channel. That spreadsheet is now a plaintext credential file, and it is copied everywhere the message goes: the sender's Sent folder, each recipient's inbox, the mail provider's backups, the chat workspace's export archive, and every phone that synced the thread. Deleting your copy deletes none of the others. Everyone on the thread can read everyone else's password, and none of them can tell whether someone already has.
With the “Also create a one-time link for each” option, the spreadsheet holds links instead of passwords. Each link opens exactly one value, works only for the number of views you allowed (1 by default), and expires anywhere from 1 hour to 30 days after it was made. Send each person their own link. If a link has already been used when the right person opens it, they know at once that someone else saw it and the password needs to be reissued. A link that is never opened is destroyed at its expiry time. A spreadsheet of spent links is worthless to anyone who finds it later.
Send the username through your normal channel and only the link through the other, so no single message carries a working login. The one-time secret page explains the same approach for a single password, including the password-protected mode.
How do the batch one-time links work?
Each link is created the same way the single one-time secret tool creates one. Your browser encrypts the value with AES-256-GCM using a fresh random key, sends only the ciphertext to our server, and receives back a short link ending in a base58 ID. The browser then appends the key to that link after a # character. Everything after the # is the URL fragment, and browsers never include the fragment in an HTTP request, so the key stays out of our server, our logs and any referrer header. Our server holds ciphertext it has no key for.
When the recipient opens the link, their browser fetches the ciphertext, reads the key from its own address bar and decrypts locally. Serving the last allowed view marks the record destroyed in the same database write, so the link immediately stops returning anything, and an hourly cleanup job deletes the stored row. A link that expires unopened is deleted the same way. Batch links are never password protected: with up to 50 recipients, a shared password would have to be distributed too, which puts the problem back where it started. Use the single secret tool for a password-protected link.
Links are made three at a time and each one is a separate request, so a batch of 50 links uses 50 of the 200 requests an IP address gets per day. If the daily limit is reached partway through, the page stops, shows the limit message, and keeps the links it already made. Rows without a link still hold their password, so you can copy or download what you have.
What is the CSV format?
Copy all as CSV and Download CSV produce the same text. The first line is a header, then one line per value. Without links the file has a single column:
value
k7$Qm2!vXp9&Lw4z
Rt8@Nc3^Hb6*Yf1jWith links there are two columns, the value and its link:
value,url
k7$Qm2!vXp9&Lw4z,https://dnsx.dev/s/3xK9mPq2#7HfR2nBw
Rt8@Nc3^Hb6*Yf1j,https://dnsx.dev/s/8bWq1Lz5#Ck4tMp9dPasswords can contain commas, and passphrases can contain spaces. A field that holds a comma, a double quote or a line break is wrapped in double quotes, with any double quote inside it doubled, as RFC 4180 describes, so Excel, Google Sheets, LibreOffice and every password manager's CSV import read it correctly. Copy all (without CSV) gives the values alone, one per line and never quoted, for pasting into a terminal or a script. Add the name or username column yourself before you send anything, and delete the value column once the links are in place.
How do I generate passwords in bulk from the command line or a spreadsheet?
The same batch generator answers curl. The count and every option from the page are query parameters, and the response is JSON with one item per value, each carrying its entropy and strength. Add format=raw to get plain text, one value per line, for piping into a script. Add secret=1 to have the API create a one-time link for each value as well.
In Google Sheets, a single formula pulls a fresh password into a cell, and filling it down gives one per row:
=IMPORTDATA("https://api.dnsx.dev/tools/password?length=20&format=raw")Sheets recalculates IMPORTDATA on its own schedule, so copy the results and paste them as values before you rely on them. Excel users can do the same with Power Query or a WEBSERVICE call.
One-time links made through the API with secret=1 are encrypted on our server, for scripts that cannot run a browser. Links made on this page are encrypted in your browser and our server never sees the value. Both kinds open on the same viewer page and destroy themselves the same way. Every request counts toward the daily limit of 200 per IP address, and no API key is needed.
Frequently Asked Questions
What is a batch password generator?▼
How many passwords can I generate at once?▼
Are the passwords in a batch related to each other?▼
Why give each person a one-time link instead of the password itself?▼
Can DNSX see the passwords in the one-time links?▼
Related Tools
Password Generator
One random password at a time, with the same length and character options.
Passphrase Generator
A memorable Diceware passphrase from the EFF short wordlist.
One-Time Secret
Send a single password through an encrypted link, with optional password protection.
Hash Generator
MD5, SHA-256, SHA-512 and bcrypt hashes for any text.