We keep an index of 6,875 public data breaches, from 2008 forum dumps to last month's leaks. For each one we record what was exposed and, when passwords were part of it, how the company stored them. That second detail rarely makes the news, but it decides whether a breach is an inconvenience or a disaster for the people in it.
So we counted. The short version: the industry has learned to hash passwords properly, and a stubborn part of it still hasn't.
Key Takeaways
- 26% of breaches that exposed passwords stored at least some of them in plaintext.
- Slow hashing such as bcrypt went from 12% of breaches in 2008–2013 to 56% in 2022–2026.
- Plaintext storage barely moved: 27% then, 21% now.
- 74% of all breaches include passwords, 41% phone numbers and 10% government ID numbers.
How breached companies stored passwords
Of the 5,177 breaches in our index that contained passwords, this is how they were stored. Some breaches mix formats (an old MD5 table next to a newer bcrypt one), so they count in more than one row.
Darker is worse. Source: SynScan breach index, 5,177 breaches with password data.
The difference between those rows is the difference between hours and centuries. A modern GPU tries billions of MD5 or SHA-1 guesses per second, so any password a human would choose falls almost immediately. Salting stops attackers from cracking every account at once with precomputed tables, but each guess is still cheap. Slow algorithms like bcrypt and Argon2 are built to make each guess expensive, which is what turns a dump of hashes into something closer to useless.
Plaintext needs no explanation. If a breach contains plaintext passwords, every one of them is usable the moment the file is copied.
Better hashing everywhere, except where it matters
Splitting the same breaches by the year they happened shows real progress, and also where it stalled:
| Breach year | Breaches | Plaintext | Fast unsalted | Fast salted | Slow hash |
|---|---|---|---|---|---|
| 2008–2013 | 365 | 27% | 35% | 47% | 12% |
| 2014–2017 | 923 | 34% | 33% | 41% | 17% |
| 2018–2021 | 1,575 | 21% | 29% | 36% | 41% |
| 2022–2026 | 1,815 | 21% | 40% | 13% | 56% |
Share of breaches with password data in each period. Rows don't add up to 100% because some breaches use several formats.
Slow hashing is now the most common format, thanks to frameworks that make bcrypt the default. The old middle ground of salted MD5 used by forum software has almost disappeared. But the share of breaches with plaintext or fast unsalted hashes did not shrink. If anything, fast unsalted hashes are more common in recent breaches than they were a decade ago.
Our reading: the sites that use a mainstream framework got safer by default, and everything else (custom-built backends, legacy systems, APIs and internal tools that were never meant to face the internet) stayed exactly as it was. Those are also the systems most likely to be forgotten on an organization's attack surface.
Passwords are rarely the only thing exposed
92% of breaches include email addresses and 58% include real names. Combined with a password, that is everything needed for credential stuffing against other services where the same person reused it. Phone numbers (41%) and dates of birth (24%) feed phishing and account recovery attacks long after the passwords are changed.
What to take from this
- Audit how every system stores passwords, not just the main product. The weak ones are usually the side projects.
- Assume reused passwords are already public. Check whether your employees' and customers' accounts appear in known breaches, and enforce MFA where they do.
- Know what you have exposed. You can't fix the storage of a system nobody remembers is online.
All figures on this page come from our live data breach statistics, which are updated daily and free to cite. You can also search your company's domain to see which of your accounts appear in these breaches.
Methodology: figures cover the 6,875 breaches publicly listed in the SynScan breach index and are computed from breach metadata, not individual records. Password formats are classified as plaintext, fast unsalted hashes (MD5, SHA-1, SHA-2, MySQL, NTLM, DES), fast salted hashes (salted SHA/MD5 and forum schemes such as vBulletin and MyBB) and slow hashes (bcrypt, PHPass, Argon2, scrypt, PBKDF2-based schemes). Last updated 2026-10-19.