PHP dispone ahora de un API muy sencilla para hacer todo eso:
http://php.net/password básicamente es usar password_hash para generar el hash, guardarlo en la DB, luego usar password_verify para verificar que coincida y es muy seguro.
No se recomienda usar md5 ya que es muy vulnerable.
Saludos.