T
THINKFORU
Submit Feedback

PBKDF2 Generator: Web Crypto Key Derivation

PBKDF2 Generator: Web Crypto Key Derivation
PBKDF2 Generator
● LOCAL ONLY
🔒 Zero Data Storage: All PBKDF2 key derivation uses the browser's built-in Web Crypto API. Your password and salt never leave your device. Read our Zero Data Storage Policy →

Inputs are stored after the # in the link, which browsers do not send to the server. By default the password is left out, so share it separately.

Modern Security & Hashing Utilities

PBKDF2 Algorithm Reference

AlgorithmSample derived keySpecDigest / BlockOWASP minimum iterations
PBKDF2-HMAC-SHA-14b007901b765489abead49d926f721d065a429c12e463f6c4cd79401085b03dbRFC 8018, RFC 6070, NIST SP 800-132160 bit / 512 bit1,400,000 (legacy only)
PBKDF2-HMAC-SHA-256c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134aRFC 8018, RFC 7914, NIST SP 800-132256 bit / 512 bit600,000
PBKDF2-HMAC-SHA-384559726be38db125bc85ed7895f6e3cf574c7a01c080c3447db1e8a76764deb3cRFC 8018, NIST SP 800-132384 bit / 1024 bitNot listed
PBKDF2-HMAC-SHA-512d197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5RFC 8018, NIST SP 800-132512 bit / 1024 bit220,000

Sample inputs for all rows: password password salt salt 4,096 iterations, 32-byte key. Iteration counts are OWASP Password Storage Cheat Sheet minimums. OWASP lists Argon2id first and recommends PBKDF2 where FIPS-140 compliance is required. Use a unique random salt of at least 16 bytes per password.

PBKDF2 Test Vector Dataset (25 Vectors & Standards)

Official RFC test vectors, reference values and edge cases. Click Copy next to any derived key, then enter the same password, salt, iterations and length in the tool above to verify your implementation.

Identifier / Standard NameSample Derived Key (Hex)Underlying AlgorithmTechnical Specs / InputsHex Output Length
1. RFC 6070 Test Vectors (PBKDF2-HMAC-SHA-1)
RFC 6070 TC10c60c80f961f0e71f3a9b524af6012062fe037a6PBKDF2-HMAC-SHA-1Password "password"; Salt "salt"; Iterations 1; dkLen 20 B40 chars
RFC 6070 TC2ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957PBKDF2-HMAC-SHA-1Password "password"; Salt "salt"; Iterations 2; dkLen 20 B40 chars
RFC 6070 TC34b007901b765489abead49d926f721d065a429c1PBKDF2-HMAC-SHA-1Password "password"; Salt "salt"; Iterations 4,096; dkLen 20 B40 chars
RFC 6070 TC4eefe3d61cd4da4e4e9945b3d6ba2158c2634e984PBKDF2-HMAC-SHA-1Password "password"; Salt "salt"; Iterations 16,777,216; dkLen 20 B; very slow, 16.7 million iterations40 chars
RFC 6070 TC53d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038PBKDF2-HMAC-SHA-1Password "passwordPASSWORDpassword"; Salt "saltSALTsaltSALTsaltSALTsaltSALTsalt"; Iterations 4,096; dkLen 25 B; password and salt longer than one block50 chars
RFC 6070 TC656fa6aa75548099dcc37d7f03425e0c3PBKDF2-HMAC-SHA-1Password "pass\0word"; Salt "sa\0lt"; Iterations 4,096; dkLen 16 B; NUL bytes inside password and salt32 chars
2. RFC 7914 Test Vectors (PBKDF2-HMAC-SHA-256)
RFC 7914 PBKDF2 TC155ac046e56e3089fec1691c22544b605f94185216dde0465e68b9d57c20dacbc49ca9cccf179b645991664b39d77ef317c71b845b1e30bd509112041d3a19783PBKDF2-HMAC-SHA-256Password "passwd"; Salt "salt"; Iterations 1; dkLen 64 B; output spans two SHA-256 blocks128 chars
RFC 7914 PBKDF2 TC24ddcd8f60b98be21830cee5ef22701f9641a4418d04c0414aeff08876b34ab56a1d425a1225833549adb841b51c9b3176a272bdebba1d078478f62b397f33c8dPBKDF2-HMAC-SHA-256Password "Password"; Salt "NaCl"; Iterations 80,000; dkLen 64 B128 chars
3. SHA-2 Reference Vectors (password / salt, cross-checked with Python hashlib)
SHA-256 password/salt c=1120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17bPBKDF2-HMAC-SHA-256Password "password"; Salt "salt"; Iterations 1; dkLen 32 B; block 64 B, digest 256 bits64 chars
SHA-256 password/salt c=2ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43PBKDF2-HMAC-SHA-256Password "password"; Salt "salt"; Iterations 2; dkLen 32 B; block 64 B, digest 256 bits64 chars
SHA-256 password/salt c=4,096c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134aPBKDF2-HMAC-SHA-256Password "password"; Salt "salt"; Iterations 4,096; dkLen 32 B; block 64 B, digest 256 bits64 chars
SHA-384 password/salt c=1c0e14f06e49e32d73f9f52ddf1d0c5c7191609233631dadd76a567db42b78676b38fc800cc53ddb642f5c74442e62be4PBKDF2-HMAC-SHA-384Password "password"; Salt "salt"; Iterations 1; dkLen 48 B; block 128 B, digest 384 bits96 chars
SHA-384 password/salt c=4,096559726be38db125bc85ed7895f6e3cf574c7a01c080c3447db1e8a76764deb3c307b94853fbe424f6488c5f4f1289626PBKDF2-HMAC-SHA-384Password "password"; Salt "salt"; Iterations 4,096; dkLen 48 B; block 128 B, digest 384 bits96 chars
SHA-512 password/salt c=1867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252c02d470a285a0501bad999bfe943c08f050235d7d68b1da55e63f73b60a57fcePBKDF2-HMAC-SHA-512Password "password"; Salt "salt"; Iterations 1; dkLen 64 B; block 128 B, digest 512 bits128 chars
SHA-512 password/salt c=2e1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53cf76cab2868a39b9f7840edce4fef5a82be67335c77a6068e04112754f27ccf4ePBKDF2-HMAC-SHA-512Password "password"; Salt "salt"; Iterations 2; dkLen 64 B; block 128 B, digest 512 bits128 chars
SHA-512 password/salt c=4,096d197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5143f30602641b3d55cd335988cb36b84376060ecd532e039b742a239434af2d5PBKDF2-HMAC-SHA-512Password "password"; Salt "salt"; Iterations 4,096; dkLen 64 B; block 128 B, digest 512 bits128 chars
4. Edge Cases and OWASP Parameters
Empty salt26939681d19995a2cefb7b90d13e1343f09b30f0abbd07416a23b9bc3c5b3536PBKDF2-HMAC-SHA-256Password "password"; Salt "" (0 B); Iterations 1,000; dkLen 32 B; a salt should never be empty in production64 chars
Single-character passwordaecf7a1663b23548371b2d8d2727434d99e18c434eac939ca9e4f3543d2a0dfdPBKDF2-HMAC-SHA-256Password "p"; Salt "salt"; Iterations 1,000; dkLen 32 B64 chars
Password longer than block (100 B)842aa8a9233cae8c06e9bc41a840724e80857d2717c43b5bf9f9930fe12c78b9PBKDF2-HMAC-SHA-256Password "a" x100 B; Salt "salt"; Iterations 1,000; dkLen 32 B; over 64 B, so HMAC hashes the password first64 chars
Unicode password (UTF-8)38c409af58a9e7e6044b6740ade75c96e5bcf03944b6a8b15c8a308375a7141ePBKDF2-HMAC-SHA-256Password "passw-umlauts-accents" UTF-8 encoded; Salt "salt"; Iterations 1,000; dkLen 32 B; encoding must match on both sides64 chars
1-byte derived keyc5PBKDF2-HMAC-SHA-256Password "password"; Salt "salt"; Iterations 4,096; dkLen 1 B2 chars
Key longer than digest (64 B)c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134af7ad98c1b458ce3fd74ca35beba3cda7b8d1038d6a87071b918f837405f3fe77PBKDF2-HMAC-SHA-256Password "password"; Salt "salt"; Iterations 4,096; dkLen 64 B; two blocks, first 32 B equal the 32 B result128 chars
Hex salt (16 random-style bytes)eb6c81535592203c092b158f8d3909672362a6f5dbd00d9828044cbaa8b252e9PBKDF2-HMAC-SHA-256Password "password"; Salt hex 000102030405060708090a0b0c0d0e0f (16 B); Iterations 10,000; dkLen 32 B; use Hex salt format in the tool64 chars
OWASP minimum, HMAC-SHA-256669cfe52482116fda1aa2cbe409b2f56c8e4563752b7a28f6eaab614ee005178PBKDF2-HMAC-SHA-256Password "password"; Salt "salt"; Iterations 600,000; dkLen 32 B; OWASP minimum for SHA-25664 chars
OWASP minimum, HMAC-SHA-5123ede6b8c2ba493194db1febc21d3be4fc1c7d63f4a6bcc14ad9ae07c63432c6a867beca4a0dc50070666875567d813cc3bfd3607e634ba6087934cb5ec4bb99aPBKDF2-HMAC-SHA-512Password "password"; Salt "salt"; Iterations 220,000; dkLen 64 B; OWASP minimum for SHA-512128 chars

FAQ

How many PBKDF2 iterations should I use?

OWASP's Password Storage Cheat Sheet recommends at least 600,000 iterations for PBKDF2-HMAC-SHA256 and 220,000 for PBKDF2-HMAC-SHA512. PBKDF2-HMAC-SHA1 needs 1,400,000 and is legacy only. Tune the count so one derivation stays under about a second on your server, and raise it as hardware gets faster.

How long should a PBKDF2 salt be?

NIST SP 800-132 requires a random salt of at least 128 bits (16 bytes), unique for every password. The salt is not secret and is stored next to the derived key. It blocks rainbow-table lookups and makes identical passwords produce different keys.

Should I use PBKDF2 or Argon2id for password storage?

OWASP lists Argon2id first because it is memory-hard and resists GPU attacks. PBKDF2 is not memory-hard, but it has FIPS-140 validated implementations and is permitted by NIST SP 800-63B-4, so it is the right choice when FIPS compliance is required. OWASP then advises PBKDF2-HMAC-SHA-256 with 600,000 or more iterations.