Hash text or a file with MD5, SHA-1, SHA-2, SHA-3, BLAKE2, BLAKE3, CRC32, xxHash or MurmurHash, or derive a key with Argon2, bcrypt, scrypt or PBKDF2, in the tab.
How it works
For the fast hashes the digest follows every keystroke. Text is hashed as its UTF-8 bytes exactly as typed, with no newline added, and written in hex, uppercase hex or Base64, plus URL-safe Base64 for the cryptographic hashes and decimal for the checksums.
Switch the input to File and the file is read from disk a chunk at a time. The cryptographic hashes and both CRCs keep only their running state, so a disc image costs no more memory than a sentence; xxHash and MurmurHash are single-pass here, and the page says when it has to hold the whole file for them. Nothing is uploaded: text, files and digests stay in the tab.
The four password hashes are slow on purpose, so they run when you press Compute, and they take typed text only. Each opens with a fresh random salt and writes the encoded string a password database stores, with the salt and the hash in unpadded Base64:
| Algorithm | Opens with | Writes |
|---|---|---|
| Argon2id, Argon2i, Argon2d | 19,456 KiB, 2 iterations, 1 lane | $argon2id$v=19$m=19456,t=2,p=1$…$… |
| bcrypt | cost 10 | $2b$10$, 22 characters of salt, 31 of hash |
| scrypt | cost 15 (N = 32,768), r = 8, p = 1 | $scrypt$ln=15,r=8,p=1$…$… |
| PBKDF2-HMAC-SHA256, -SHA512, -SHA1 | 600,000 iterations | $pbkdf2-sha256$i=600000$…$… |
Examples
A word, and the same word with a newline
hello
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ= (the same, in Base64)
hello, then a newline
5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03
Both are SHA-256. The second is what echo hello | sha256sum prints, because echo adds a newline; press Enter after the word and the page gives it too.
The CRC check value
123456789
CRC-32 (IEEE 802.3): cbf43926 decimal 3421780262
CRC-32C (Castagnoli): e3069283 decimal 3808858755
123456789 is the input every CRC is checked against. The decimal is the integer Python's zlib.crc32 returns.
Argon2id with a fixed salt
Password: correct horse
Salt: saltsalt
$argon2id$v=19$m=19456,t=2,p=1$c2FsdHNhbHQ$pEoTT/PQJUrQ+4Qp3XrtcTufBun4D9FCw+dj/PBsWHI
The defaults were left as they open. c2FsdHNhbHQ is saltsalt in Base64 and the last field is the 32-byte hash, so the string carries everything a verifier needs except the password. The codec turns either field into hex.
Common problems
The digest does not match sha256sum
Nearly always a line ending. echo appends a newline, a file saved on Windows ends its lines in CRLF, and text pasted into the box has its line breaks turned into plain LF by the browser. To hash the bytes on disk, use the File input; the hex editor shows whether a file's lines end in 0d 0a.
SHA3-256 does not match an Ethereum hash
Ethereum uses Keccak-256, the submission SHA-3 was standardised from, which pads its input differently. The empty string is a7ffc6f8…80f8434a under SHA3-256 and c5d24601…5d85a470 under Keccak-256. Pick Keccak-256 (pre-standard) under SHA-3.
Another tool derives a different hash from the same salt
The salt is used as UTF-8 text, exactly as typed. The random salt the page fills in is 16 random bytes written as 32 hex characters, and those 32 characters are the salt: a tool that decodes the hex first is hashing 16 different bytes. The Base64 field in the encoded string is the bytes actually used. Argon2's Memory is in kibibytes.
bcrypt ignores the end of a long password
bcrypt reads the first 72 bytes and drops the rest, so 72 as and 72 as followed by b give the same hash under the same salt. A character outside ASCII takes two to four of those bytes. The page says so under the box once a password passes the limit.
Frequently asked questions
Are MD5 and SHA-1 still safe to use?
For spotting accidental corruption, yes. For anything an attacker can choose, no: practical collisions have been published for both, so two different files can share a digest. Use SHA-256, SHA-3, BLAKE2 or BLAKE3 where somebody might want to forge a match, and never store passwords under any fast hash.
Which password hash should I use?
Argon2id where you can. The page opens it at OWASP's minimum of 19 MiB, 2 iterations and 1 lane, bcrypt at OWASP's cost of 10, and PBKDF2-HMAC-SHA256 at its 600,000 iterations. scrypt opens at N = 32,768 with r = 8 and p = 1, which is below OWASP's floor, so raise Cost to 17 or Parallelism to 3.
How do I make a Subresource Integrity hash?
Switch the input to File and choose the script or stylesheet, pick SHA-512 with the SHA-384 variant, and set the output to Base64. Put sha384- in front of the result and use it as the integrity attribute. The hash covers the exact bytes the server sends, so a minified copy has a different one.