What these algorithms are still safe for
MD5 and SHA-1 are both comprehensively broken for collision resistance, and it is worth being precise about what that does and does not mean. A collision attack means an attacker can construct two different inputs with the same digest. MD5 collisions have been trivial since 2004 and can be produced on a laptop in seconds. SHA-1 fell in 2017 with the SHAttered attack, and by 2020 a chosen-prefix collision — the far more dangerous variant, where the attacker controls meaningful content in both files — cost roughly 45,000 US dollars of rented GPU time. That figure only goes down.
What has not been broken for either is preimage resistance: given a digest, nobody can practically compute an input that produces it. This is why MD5 and SHA-1 remain perfectly reasonable as non-adversarial checksums — verifying a download did not corrupt in transit, deduplicating files, cache keys, ETags. The failure mode there is random corruption, not a motivated attacker, and both algorithms detect that flawlessly.
The line to hold is simple: the moment a hash is used to decide whether to trust something — a signature, a certificate, a software update, a "this file has not been tampered with" check — MD5 and SHA-1 are unusable and SHA-256 is the minimum. SHA-512 is not meaningfully more secure against current attacks but is often faster on 64-bit hardware, since it operates on 64-bit words.
Hashing is not encryption, and it is not password storage
A hash is one-way and keyless: there is nothing to decrypt, because the original input is not present in the digest. Any tool promising to "decrypt" an MD5 hash is running a lookup table of precomputed common inputs, not reversing the mathematics. This is also why a hash of a short, predictable value — a phone number, a postcode, an email address — provides almost no privacy. The input space is small enough to enumerate exhaustively.
The consequence people get wrong most often is password storage. A fast hash is precisely the wrong tool, because speed is the attacker's advantage: commodity GPUs compute billions of SHA-256 digests per second against a stolen database. Passwords need a deliberately slow, memory-hard key derivation function — Argon2id is the current recommendation, with bcrypt and scrypt both still acceptable — plus a unique random salt per user so that identical passwords do not produce identical digests and one cracked entry does not reveal others.
If you need to verify that a message came from who it claims to, a bare hash is also insufficient, since anyone can recompute it over modified content. That requires an HMAC, which mixes in a secret key. Generate that key with the password generator rather than inventing one.
Why the digests here are computed the way they are
SHA-256, SHA-384 and SHA-512 come from the browser's native crypto.subtle.digest, which is implemented in the browser's own compiled cryptography library rather than in JavaScript. It is fast and constant-time, and it is the reason this page can hash a sizeable file without freezing.
MD5 and SHA-1 are the exception. The Web Crypto specification deliberately omits MD5 entirely and exposes SHA-1 only for legacy interoperability, precisely to discourage new use, so those digests are computed in JavaScript instead. They are included here because verifying a checksum published by someone else is a real, legitimate need — you do not get to choose which algorithm an upstream project used.
Everything runs locally, which is not a marketing line but a requirement: pasting an API key, a private document or a password into a server-side hashing service hands the plaintext to that server, and the digest is the only thing you wanted it to see.