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
| Algorithm | Sample derived key | Spec | Digest / Block | OWASP minimum iterations |
|---|---|---|---|---|
| PBKDF2-HMAC-SHA-1 | 4b007901b765489abead49d926f721d065a429c12e463f6c4cd79401085b03db | RFC 8018, RFC 6070, NIST SP 800-132 | 160 bit / 512 bit | 1,400,000 (legacy only) |
| PBKDF2-HMAC-SHA-256 | c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134a | RFC 8018, RFC 7914, NIST SP 800-132 | 256 bit / 512 bit | 600,000 |
| PBKDF2-HMAC-SHA-384 | 559726be38db125bc85ed7895f6e3cf574c7a01c080c3447db1e8a76764deb3c | RFC 8018, NIST SP 800-132 | 384 bit / 1024 bit | Not listed |
| PBKDF2-HMAC-SHA-512 | d197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5 | RFC 8018, NIST SP 800-132 | 512 bit / 1024 bit | 220,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 Name | Sample Derived Key (Hex) | Underlying Algorithm | Technical Specs / Inputs | Hex Output Length |
|---|---|---|---|---|
| 1. RFC 6070 Test Vectors (PBKDF2-HMAC-SHA-1) | ||||
| RFC 6070 TC1 | 0c60c80f961f0e71f3a9b524af6012062fe037a6 | PBKDF2-HMAC-SHA-1 | Password "password"; Salt "salt"; Iterations 1; dkLen 20 B | 40 chars |
| RFC 6070 TC2 | ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957 | PBKDF2-HMAC-SHA-1 | Password "password"; Salt "salt"; Iterations 2; dkLen 20 B | 40 chars |
| RFC 6070 TC3 | 4b007901b765489abead49d926f721d065a429c1 | PBKDF2-HMAC-SHA-1 | Password "password"; Salt "salt"; Iterations 4,096; dkLen 20 B | 40 chars |
| RFC 6070 TC4 | eefe3d61cd4da4e4e9945b3d6ba2158c2634e984 | PBKDF2-HMAC-SHA-1 | Password "password"; Salt "salt"; Iterations 16,777,216; dkLen 20 B; very slow, 16.7 million iterations | 40 chars |
| RFC 6070 TC5 | 3d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038 | PBKDF2-HMAC-SHA-1 | Password "passwordPASSWORDpassword"; Salt "saltSALTsaltSALTsaltSALTsaltSALTsalt"; Iterations 4,096; dkLen 25 B; password and salt longer than one block | 50 chars |
| RFC 6070 TC6 | 56fa6aa75548099dcc37d7f03425e0c3 | PBKDF2-HMAC-SHA-1 | Password "pass\0word"; Salt "sa\0lt"; Iterations 4,096; dkLen 16 B; NUL bytes inside password and salt | 32 chars |
| 2. RFC 7914 Test Vectors (PBKDF2-HMAC-SHA-256) | ||||
| RFC 7914 PBKDF2 TC1 | 55ac046e56e3089fec1691c22544b605f94185216dde0465e68b9d57c20dacbc49ca9cccf179b645991664b39d77ef317c71b845b1e30bd509112041d3a19783 | PBKDF2-HMAC-SHA-256 | Password "passwd"; Salt "salt"; Iterations 1; dkLen 64 B; output spans two SHA-256 blocks | 128 chars |
| RFC 7914 PBKDF2 TC2 | 4ddcd8f60b98be21830cee5ef22701f9641a4418d04c0414aeff08876b34ab56a1d425a1225833549adb841b51c9b3176a272bdebba1d078478f62b397f33c8d | PBKDF2-HMAC-SHA-256 | Password "Password"; Salt "NaCl"; Iterations 80,000; dkLen 64 B | 128 chars |
| 3. SHA-2 Reference Vectors (password / salt, cross-checked with Python hashlib) | ||||
| SHA-256 password/salt c=1 | 120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17b | PBKDF2-HMAC-SHA-256 | Password "password"; Salt "salt"; Iterations 1; dkLen 32 B; block 64 B, digest 256 bits | 64 chars |
| SHA-256 password/salt c=2 | ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43 | PBKDF2-HMAC-SHA-256 | Password "password"; Salt "salt"; Iterations 2; dkLen 32 B; block 64 B, digest 256 bits | 64 chars |
| SHA-256 password/salt c=4,096 | c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134a | PBKDF2-HMAC-SHA-256 | Password "password"; Salt "salt"; Iterations 4,096; dkLen 32 B; block 64 B, digest 256 bits | 64 chars |
| SHA-384 password/salt c=1 | c0e14f06e49e32d73f9f52ddf1d0c5c7191609233631dadd76a567db42b78676b38fc800cc53ddb642f5c74442e62be4 | PBKDF2-HMAC-SHA-384 | Password "password"; Salt "salt"; Iterations 1; dkLen 48 B; block 128 B, digest 384 bits | 96 chars |
| SHA-384 password/salt c=4,096 | 559726be38db125bc85ed7895f6e3cf574c7a01c080c3447db1e8a76764deb3c307b94853fbe424f6488c5f4f1289626 | PBKDF2-HMAC-SHA-384 | Password "password"; Salt "salt"; Iterations 4,096; dkLen 48 B; block 128 B, digest 384 bits | 96 chars |
| SHA-512 password/salt c=1 | 867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252c02d470a285a0501bad999bfe943c08f050235d7d68b1da55e63f73b60a57fce | PBKDF2-HMAC-SHA-512 | Password "password"; Salt "salt"; Iterations 1; dkLen 64 B; block 128 B, digest 512 bits | 128 chars |
| SHA-512 password/salt c=2 | e1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53cf76cab2868a39b9f7840edce4fef5a82be67335c77a6068e04112754f27ccf4e | PBKDF2-HMAC-SHA-512 | Password "password"; Salt "salt"; Iterations 2; dkLen 64 B; block 128 B, digest 512 bits | 128 chars |
| SHA-512 password/salt c=4,096 | d197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5143f30602641b3d55cd335988cb36b84376060ecd532e039b742a239434af2d5 | PBKDF2-HMAC-SHA-512 | Password "password"; Salt "salt"; Iterations 4,096; dkLen 64 B; block 128 B, digest 512 bits | 128 chars |
| 4. Edge Cases and OWASP Parameters | ||||
| Empty salt | 26939681d19995a2cefb7b90d13e1343f09b30f0abbd07416a23b9bc3c5b3536 | PBKDF2-HMAC-SHA-256 | Password "password"; Salt "" (0 B); Iterations 1,000; dkLen 32 B; a salt should never be empty in production | 64 chars |
| Single-character password | aecf7a1663b23548371b2d8d2727434d99e18c434eac939ca9e4f3543d2a0dfd | PBKDF2-HMAC-SHA-256 | Password "p"; Salt "salt"; Iterations 1,000; dkLen 32 B | 64 chars |
| Password longer than block (100 B) | 842aa8a9233cae8c06e9bc41a840724e80857d2717c43b5bf9f9930fe12c78b9 | PBKDF2-HMAC-SHA-256 | Password "a" x100 B; Salt "salt"; Iterations 1,000; dkLen 32 B; over 64 B, so HMAC hashes the password first | 64 chars |
| Unicode password (UTF-8) | 38c409af58a9e7e6044b6740ade75c96e5bcf03944b6a8b15c8a308375a7141e | PBKDF2-HMAC-SHA-256 | Password "passw-umlauts-accents" UTF-8 encoded; Salt "salt"; Iterations 1,000; dkLen 32 B; encoding must match on both sides | 64 chars |
| 1-byte derived key | c5 | PBKDF2-HMAC-SHA-256 | Password "password"; Salt "salt"; Iterations 4,096; dkLen 1 B | 2 chars |
| Key longer than digest (64 B) | c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134af7ad98c1b458ce3fd74ca35beba3cda7b8d1038d6a87071b918f837405f3fe77 | PBKDF2-HMAC-SHA-256 | Password "password"; Salt "salt"; Iterations 4,096; dkLen 64 B; two blocks, first 32 B equal the 32 B result | 128 chars |
| Hex salt (16 random-style bytes) | eb6c81535592203c092b158f8d3909672362a6f5dbd00d9828044cbaa8b252e9 | PBKDF2-HMAC-SHA-256 | Password "password"; Salt hex 000102030405060708090a0b0c0d0e0f (16 B); Iterations 10,000; dkLen 32 B; use Hex salt format in the tool | 64 chars |
| OWASP minimum, HMAC-SHA-256 | 669cfe52482116fda1aa2cbe409b2f56c8e4563752b7a28f6eaab614ee005178 | PBKDF2-HMAC-SHA-256 | Password "password"; Salt "salt"; Iterations 600,000; dkLen 32 B; OWASP minimum for SHA-256 | 64 chars |
| OWASP minimum, HMAC-SHA-512 | 3ede6b8c2ba493194db1febc21d3be4fc1c7d63f4a6bcc14ad9ae07c63432c6a867beca4a0dc50070666875567d813cc3bfd3607e634ba6087934cb5ec4bb99a | PBKDF2-HMAC-SHA-512 | Password "password"; Salt "salt"; Iterations 220,000; dkLen 64 B; OWASP minimum for SHA-512 | 128 chars |
FAQ
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.