Cryptographic failures are usually not broken algorithms — they're misuse of crypto. Each tab picks a different misuse pattern from the A04 family.
MD5 was designed as a fast checksum (~25 billion hashes/sec per GPU). Using it to store passwords means any DB leak becomes plaintext within hours.
def hash_password(pw):
return hashlib.md5(pw.encode()).hexdigest()
Use any common password — password, 123456, admin.
Paste the MD5 into crackstation.net — plaintext returned in milliseconds.
bcrypt.hashpw(pw.encode(), bcrypt.gensalt()) —
~100 ms per hash, salted, billions of times harder to brute force.