Password Hash Generator & Verifier (Argon2id/bcrypt)
A tool that generates password hashes with Argon2id, Argon2i, Argon2d, bcrypt, scrypt, and PBKDF2 right in your browser. You can set parameters such as memory, iterations, and cost, choose the salt, and verify whether an Argon2 PHC string or bcrypt hash matches a password.
How to use
- On the Generate tab, choose an algorithm (Argon2, bcrypt, scrypt, or PBKDF2).
- Enter the password. A random salt is generated automatically, or you can enter one in hex or text to reproduce an existing hash.
- Adjust parameters such as memory, iterations, parallelism, or cost if needed, and click "Generate hash". The defaults follow OWASP recommendations.
- Argon2 and bcrypt produce an encoded string ready to store; scrypt and PBKDF2 show the hash in hex and Base64. Each can be copied.
- On the Verify tab, enter a hash string and a password and click "Verify" to check whether they match.
About this tool
This tool computes the slow hash functions (key derivation functions) used to store passwords, right in your browser. Fast hashes like SHA-256 are vulnerable to brute-force attacks, so passwords are normally stored with Argon2id, bcrypt, scrypt, or PBKDF2, whose cost can be tuned.
Argon2id won the Password Hashing Competition and is OWASP's first recommendation. Results are output as a PHC string such as $argon2id$v=19$m=19456,t=2,p=1$<salt>$<hash>, which Argon2 libraries in any language can verify directly. bcrypt is output in $2a$<cost>$... format, and PHP's $2y$ format can be verified too.
Hashing runs in a Web Worker using a WebAssembly implementation (hash-wasm) and the Web Crypto API, so the page stays responsive even with heavy parameters, and you can cancel midway. Your password and salt are never sent to a server.
For a reproducible check, choose PBKDF2 with SHA-256, password password, text salt salt, one iteration, and a 32-byte output. The hex result is 120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17b. This low iteration count is only for checking behavior.
When comparing implementations, distinguish a salt's displayed text from its actual bytes. Text 6162 and hexadecimal 6162 represent different salts. Match the encoding, iteration count, and output length as well as the algorithm.
Frequently asked questions
Which algorithm and parameters should I use?
For new systems, Argon2id (19 MiB of memory, 2 iterations, parallelism 1 or more) is recommended. Where Argon2 isn't available, use scrypt (N=2^17, r=8, p=1); for compatibility with existing systems, bcrypt (cost 10 or more); and where FIPS compliance is required, PBKDF2-HMAC-SHA256 (600,000 iterations or more). This tool's defaults are these OWASP recommendations.
Why does the result change every time for the same password?
Because the salt (a random value) changes each time. The salt makes the same password produce different hashes, which defeats attacks using precomputed tables. To get the same result, specify the same salt and parameters.
bcrypt rejects my long password.
By design, bcrypt only uses the first 72 bytes of a password, and multibyte characters take several bytes each. For long passwords, Argon2id is recommended.
Is my password sent to a server?
No. Generating and verifying hashes all happens in your browser using a Web Worker and the Web Crypto API.