it-swarm-eu.dev

Come usare sha256 in php5.3.0

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. 

32
Jiangong SUN

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:

  1. Ottenere la password dal modulo
  2. hashing la password
  3. password memorizzata
  4. confronto dei due. 
51
Jeremy Morgan

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.

11
Yannick Motton

Dovresti usare l'hashing adattivo come http://en.wikipedia.org/wiki/Bcrypt per proteggere le password

1
Edwin M

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 bitssha384 => 96 bitssha512 => 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);
1
IT Developers

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.

0
Luis Ferro