You just saw how fast MD5 falls — a hashing failure. Adobe's mistake was different: they used reversible encryption instead of one-way hashing. Both are cryptographic failures, but with different root causes.
In October 2013, Adobe disclosed a breach affecting 153 million accounts. Each record contained an email, an encrypted password, and a plaintext password hint. The passwords weren't hashed — they were encrypted using 3DES in ECB mode with a single key for all 153 million passwords. Within hours, researchers had identified the top 100 most common passwords without even cracking the encryption — because ECB mode and plaintext hints gave everything away.
Adobe used encryption, not hashing. They used a real algorithm (3DES). What was the fundamental mistake?
A Node.js password storage function. One line uses the wrong cryptographic primitive. Click it.
Passwords → slow hash (bcrypt, argon2id). Data at rest → authenticated encryption (AES-GCM). Transport → TLS 1.2+.
Passwords → bcrypt or argon2id (cost ≥ 12). Data at rest → AES-256-GCM. Transport → TLS 1.2+. If you see MD5 or SHA on a password, stop and fix it.
A team stores passwords using SHA-256 with a unique salt per password. Is this secure?
What does the "cost factor" in bcrypt control?
In 2025, OWASP moved Cryptographic Failures from #2 to #4. What does this reflect?
Which password-hashing setup is stronger?
Passwords must be slow-hashed, not encrypted. Data must be authenticated-encrypted, not just encrypted. "We use encryption" is not a security property — which algorithm, which mode, which key management is.
A04 · Cryptographic Failuresbcrypt or argon2id — cost ≥ 12bcrypt with cost 12+ (OWASP now recommends argon2id as first choice, bcrypt for legacy). For data at rest: AES-256-GCM with unique IVs and proper key management (HSM or cloud KMS, never hardcoded). For transport: TLS 1.2+ only, disable CBC ciphers, enforce HSTS. Never roll your own crypto.Five things you can verify right now.