w3schools password generar desencriptar php hash sha256

password - Cómo usar sha256 en php5.3.0



password hash php (4)

¿Podría ser esto un error tipográfico? (Dos Ps en ppasscode, ¿por qué?)

$_POST[''ppasscode''];

Me aseguraría y haré:

print_r($_POST);

y asegúrese de que los datos sean precisos allí, y luego resuene lo que debería ser:

echo hash(''sha256'', $_POST[''ppasscode'']);

Compare este resultado con lo que tiene en la base de datos (manualmente). Al hacer esto, estás explorando tus posibles puntos de falla:

  1. Obtener contraseña del formulario
  2. hashing la contraseña
  3. contraseña almacenada
  4. comparación de los dos.

Estoy usando sha256 para encriptar la contraseña. Puedo guardar la contraseña cifrada sha256 en mysql. Pero no puedo iniciar sesión con la misma cláusula.

Insertar codigo:

<?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'')";

Seleccionar código:

<?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());

¿Hay algo mal? Estoy muy confundido. Gracias.



En primer lugar, sha256 es un algoritmo hash, no un tipo de cifrado. Una encriptación requeriría tener una forma de descifrar la información a su valor original (colisiones a un lado).

Al mirar su código, parece que debería funcionar si proporciona el parámetro correcto.

  • Primero intente utilizar una cadena literal en su código y verifique su validez en lugar de usar la variable $_POST[]

  • Intente mover la comparación de la consulta de la base de datos al código (obtenga el hash para el usuario dado y compare con el hash que acaba de calcular)

Pero lo más importante es que antes de implementar esto en cualquier tipo de moda pública, recuerde desinfectar sus entradas. No permita que SQL arbitrario se inserte en las consultas. La mejor idea aquí sería usar consultas parametrizadas.


Una solución mucho mejor es usar el excelente script de compatibilidad de Anthony Ferrara:

https://github.com/ircmaxell/password_compat

Por favor, y también, cuando verifique la contraseña, siempre agregue una forma (preferiblemente asincrónica, para que no afecte el proceso de verificación de ataques de timming) para actualizar el hash si es necesario.