This document discusses password hashing and safe hashing algorithms. It begins with an introduction to password hashing and why it is important to store hashed passwords rather than plaintext passwords. It then discusses various hashing algorithms such as MD5, SHA-1, SHA-2, and SHA-3. The document also covers different types of password attacks like dictionary attacks, brute force attacks, and rainbow tables. Finally, it discusses the properties that make for a secure hashing algorithm, including using unique salts per password and algorithms being fast on software but slow on hardware.