How password hashing works: bcrypt, Argon2, and why plain text storage is malpractice
When you create an account on a website, the site should hash your password before storing it. A hash is a one-way mathematical function: the same input always produces the same output, but you can't reverse the output to get the input. When you log in, the site hashes what you typed and compares it to the stored hash. If the database is breached, attackers see hashes, not passwords.
How this is calculated
Not all hashing is equal. A simple SHA-256 hash of a password is fast to compute, which means it's fast to brute-force. Modern password hashing algorithms (bcrypt, Argon2, PBKDF2) are deliberately slow and memory-intensive. bcrypt has a configurable cost factor that doubles the work with each increment. Argon2 (the winner of the 2015 Password Hashing Competition) adds memory hardness, making it expensive to attack with GPUs and ASICs. If a website emails you your password in plain text after signup, they are storing it without hashing, which is gross negligence. Close your account immediately. You can't fix their security, and if they're doing that wrong, everything else is probably wrong too.
Verdict
You can't control how websites store your password, which is exactly why you should never reuse them. A strong unique password per site, plus 2FA, means that even if a site stores passwords in plain text (and gets breached), only that one account is affected.
More Passwords scenarios
Related guides
Frequently asked questions
How long should a secure password be?
Is the generated password actually random?
Is my password saved anywhere?
What's the difference between a passphrase and a password?
Should I use the same password everywhere?
How often should I change my passwords?
Related tools
CHMOD Configurator
Calculate Linux file permissions using checkboxes, octal numbers, or symbolic notation.
Use tool ➜Text Encoding Converter
Convert between Text, Base64, Binary, Hexadecimal, and Decimal formats.
Use tool ➜Cron Generator
Visually build standard 5-part cron expressions or translate them into readable schedules.
Use tool ➜