Sto usando sha256 per crittografare la password. Posso salvare la password crittografata sha256 in mysql. Ma non posso accedere con la stessa clausola.
Inserire codice:
<?php
error_reporting(E_ALL ^ E_NOTICE);
$username = $_POST['uusername'];
$passcode = $_POST['ppasscode'];
$userflag = $_POST['uuserflag'];
//$passcodeen = hash('sha256',$passcode);
$passcodeen = hash('sha256', (get_magic_quotes_gpc() ? stripslashes($ppasscode) : $ppasscode));
$conn = mysql_connect("localhost","charles","charles") or die("connection failed with DB:".mysql_error());
mysql_select_db("sessiondb");
$query = "INSERT INTO users(username,passcode,userflag) values('$username','$passcodeen','$userflag')";
Seleziona il codice:
<?php
error_reporting(E_ALL ^ E_NOTICE);
@mysql_connect("localhost","charles","charles") or die("Connection failed".mysql_error());
@mysql_select_db("sessiondb") or die("Database doesn't exist".mysql_error());
//get user input
$username = $_POST['username'];
$ppasscode = $_POST['ppasscode'];
//$passcodeen = hash('sha256', $ppasscode);
$passcodeen = hash('sha256', (get_magic_quotes_gpc() ? stripslashes($ppasscode) : $ppasscode));
//get session value from mysql
$query = @mysql_query("select username, userflag from users where username ='$username' and passcode = '$passcodeen'") or die("Query execution failed".mysql_error());
C'è qualcosa di sbagliato? Sono molto confuso. Grazie.
Potrebbe essere un errore di battitura? (due Ps in ppasscode, destinati?)
$_POST['ppasscode'];
Mi assicurerei e farei:
print_r($_POST);
e assicurati che i dati siano precisi lì, quindi fai eco a come dovrebbe apparire:
echo hash('sha256', $_POST['ppasscode']);
Confronta questo output con quello che hai nel database (manualmente). In questo modo stai esplorando i tuoi possibili punti di errore:
Prima di tutto, sha256 è un algoritmo di hashing, non un tipo di crittografia. Una crittografia richiederebbe un modo per decrittografare le informazioni al loro valore originale (collisioni a parte).
Guardando il tuo codice, sembra che dovrebbe funzionare se stai fornendo il parametro corretto.
Prova a utilizzare prima una stringa letterale nel codice e verifica la sua validità anziché utilizzare la variabile $_POST[]
Prova a spostare il confronto dalla query del database al codice (ottieni l'hash per l'utente specificato e confrontalo con l'hash appena calcolato)
Ma soprattutto prima di distribuire questo in ogni tipo di moda pubblica, per favore ricorda di disinfettare i tuoi input. Non consentire l'inserimento di SQL arbitrario nelle query. L'idea migliore sarebbe utilizzare query parametrizzate.
Dovresti usare l'hashing adattivo come http://en.wikipedia.org/wiki/Bcrypt per proteggere le password
La prima cosa è fare un confronto delle funzioni di SHA e optare per l'algoritmo più sicuro che supporta il tuo linguaggio di programmazione (PHP).
Quindi puoi masticare la documentazione ufficiale per implementare la funzione hash()
che riceve come argomento l'algoritmo di crittografia che hai scelto e la password non elaborata.
sha256 => 64 bits
sha384 => 96 bits
sha512 => 128 bits
Più sicuro è l'algoritmo di crittografia, maggiore è il costo in termini di tempo di crittografia e decrittografia dal lato server.
$hashedPassword = hash('sha256', $password);
Una soluzione migliore è usare semplicemente l'eccellente script di compatibilità di Anthony Ferrara:
https://github.com/ircmaxell/password_compat
Per favore, e anche, quando si controlla la password, aggiungere sempre un modo (preferibilmente asincrono, quindi non influisce sul processo di controllo degli attacchi temporali) per aggiornare l'hash se necessario.