Hola, guardas tu password que es 123456 en la base de datos codificado como tu quieras, digamos que md5()
php -> guarda md5(123456) -> mysql(e10adc3949ba59abbe56e057f20f883e)
Entonces como en el mysql tenemos de contraseña e10adc3949ba59abbe56e057f20f883e lo unico que tienes que hacer es pedir la conraseña original al usuario y volverla a codificar y comparar el resultado.
if(md5('123456') != 'e10adc3949ba59abbe56e057f20f883e'){ echo 'incorrecto';
}
Lo que se compara, guarda, etc es el hash no el passoriginal, un sistema nunca debe trabajar con contraseñas sino con hashes y el hash es el resultado de una codificación cualquiera, pero siempre debe codificarse de la misma forma.
Por ejemplo digamos que tengo una caja con contraseñas en mi casa entonces tu vienes y me dices que me darás tu contraseña para guardarla y me entregas el md5 de tu contraseña, ahora digamos que vuelves en 30 años mas y yo no te reconozco asi que te solicito la contraseña y tu me vuelves a dar el md5 de tu contraseña, entonces la comparo con la que está guardada y ya.
Por lo tanto cuando alguien le entrega una contraseña a un sistema web este siempre debe codificarla, y luego de eso trabajarla como si fuera el pass real y ya, tanto al guardarla como al solicitarla.
Puede ser un sha1, un rc4, un md5 o una mezcla rc4(md5($pass).sha1($pass), $pass) y así evitas las colisiones y crackeos.
--------- mad te me adelantaste xD