Ho una formn con una casella password.
nel effettuare il login prelevo la variabile cosi;
$pass=$_POST(md5($password));
poi quando la passo nella query devo sicuramente decriptarla., ma come??
Ho una formn con una casella password.
nel effettuare il login prelevo la variabile cosi;
$pass=$_POST(md5($password));
poi quando la passo nella query devo sicuramente decriptarla., ma come??
Il codice che hai postato non è valido.
forse intendevi:
In ogni caso non puoi decriptare un md5 perché non è un algoritmo reversibile. Il modo per controllare se una password inserita in un form coincide con quella salvata nel database è quello di criptare la password inserita dall'utente in fase di login e confrontarne il risultato con quella salvata nel database.Codice PHP:
$pass = md5($_POST['password']);
Per far recuperare la password smarrita ovviamente non puoi inviargliela per email (perché nessuno la può conoscere*), ma ne devi generare una nuova.
* In realtà esistono, anche online e free, delle tabelle (denominate "rainbow tables") dove sono associati gli MD5 di tante stringhe pseudo-intellegibili e/o comuni. Per cui se la tua password criptata è "5ebe2294ecd0e0f08eab7690d2a6ee69" allora è facilmente scopribile che la parola corrispondente è "secret". Ma se la tua password criptata è "749de9f3ab012335cde4a1698fd40a24" difficilmente in qualche tabella risulterà la corrispondenza con "Ka$tah!1!192pippoplutoepaparino".
Per questo motivo si è anche soliti utilizzare un SALT. Ovvero una stringa o sequenza di byte da concatenare con l'input dell'utente in modo da rendere inefficaci le Rainbow Tables.
Es:
Codice PHP:
/** REGISTRAZIONE***/
$salt = "9&/$rst1\\92783**";
$password = md5($salt.$_POST['pass']);
// inserimento della password nel database
/** LOGIN***/
$salt = "9&/$rst1\\92783**";
$login_password = md5($salt.$_POST['loginpass']);
// query
$qry = 'SELECT id FROM users WHERE username = :username AND password = :login_password';
// etc
Tuttavia, anche con queste precauzioni, ci sono altri 2 problemi:
1) Il SALT è inefficace se si verificano determinate circostanze (salt all'inizio della stringa e dimensione nota). Non chiedermi di più
2) E' possibile (improbabile ma possibile) che un qualsiasi MD5, con salt o meno, collida con l'md5 di una stringa più comune. Vuol dire che se tu scegli una password complessissima il cui MD5 per puro caso coincide con l'MD5 della parola "secret", non importa se il login lo faccio con "secret" o con la tua password complessa: entrerò dentro comunque.
Per questo motivo non si usa più l'MD5 come algoritmo per criptare le password, ma si usano funzioni più avanzate basate sulla funzione crypt di PHP. (Personalmente mi baso sulla classe \Zend\Crypt\Password\Bcrypt dello Zend Framework).