Although it may sound like it, salting and hashing are not items on a breakfast menu. Hashing is a form of encryption which is meant to be impossible to invert. As discussed, MD5 is one old-insecure version of a hashing system, which works by inputting data, applying the hash function, and getting a code out of that encryption. Some hashes are stronger than others. No two messages should have the same hash, and a change of even one letter in a message will drastically change the hash. This is called the avalanche effect.
Hashing, while more secure than plain text, can still be compromised, as shown above. That is where a SALT comes in. Salting is where an extra chunk of data is added to the password before encrypting. If your password is ever stolen, the thief would require the unknown salt to decrypt the password. For instance, if your encrypted password was deciphered using a rainbow table, there would be extra digits missing from that encryption breach. These missing digits would be your salt.
Example: User provides password + your developer adds a SALT + the server encrypts/hashes it = SECURE
While not extremely common for most people using everyday functions, it is extremely important to salt all of your passwords when you are developing an app. The same goes if you want to add an extra level of security for storing user data.
Being granted access to a database of information from your users is a huge responsibility. You could even add a simple salt to your users hash just by storing their password and other piece of information together (such as a postal code), instead of just the password. This means if your hash was decoded, the user information would still be safe because it would be problematic to decipher what the actual password is within that information. On top of this, any hash over 12 characters is much more difficult to generate and store, so adding a password together with a salt means much more work for anyone attempting to breach your security.