Foros del Web » Programando para Internet » PHP »

Acceso con Hash

Estas en el tema de Acceso con Hash en el foro de PHP en Foros del Web. Hola. tengo un sistema de login que encripté con hash pero no logro que me lea las contraseñas encriptadas. Este es el codigo que me ...
  #1 (permalink)  
Antiguo 10/11/2017, 12:06
 
Fecha de Ingreso: octubre-2008
Ubicación: Colombia
Mensajes: 315
Antigüedad: 9 años, 1 mes
Puntos: 1
Busqueda Acceso con Hash

Hola. tengo un sistema de login que encripté con hash pero no logro que me lea las contraseñas encriptadas.

Este es el codigo que me encripta la contraseña, funcion correctamente.

Código PHP:
$a $_POST['nombre'];
$b $_POST['username'];
$c $_POST['email'];
$d =password_hash($passwordPASSWORD_DEFAULT, array("cost"=>12));
$e $_POST['celphone'];
$f $_POST['img_profile'];
$g $_POST['tipo_usuario']; 


Este es mi codigo de Login que no me funciona.

Código PHP:
<?php
session_start
();
?>
 
<?php 
require_once("conexion.php"); 
?>
<?php
 $contador
=0;
if(isset(
$_SESSION["session_username"])){
// echo "Session is set"; // for testing purposes
header("Location: index.php");
}
 
if(isset(
$_POST["login"])){
 
if(!empty(
$_POST['username']) && !empty($_POST['password'])) {
 
$username=$_POST['username'];
 
$password=$_POST['password'];
 
$query =mysql_query("SELECT * FROM loggeous WHERE username='".$username."' AND password='".$password."'");
 
$numrows=mysql_num_rows($query);
 if(
$numrows!=0)
 
{
 
$row=mysql_fetch_assoc($query);
 {
     
 
$dbusername=$row['username'];
 
$password=$row['password'];
 
$dbnombre $row['nombre'];
 
$id $row['cod_us'];
 
$correo $row['email'];
 
$telefono $row['celphone'];
 
$tipo_usuario $row['tipo_usuario'];
 
$foto $row['img_profile']; 
 }
 
if(
$username == $dbusername && $password == $password)
 
{
 
 
$_SESSION['session_username']=$username;
 
$_SESSION['nombre_usuario'] = $dbnombre;
 
$_SESSION['cod_us'] = $id;    
 
$_SESSION['email'] = $correo;    
 
$_SESSION['celphone'] = $telefono;    
 
$_SESSION['tipo_usuario'] = $tipo_usuario;   
 
$_SESSION['password'] = $password;
 
$_SESSION['img_profile'] = $foto;
    
       
 
/* Redirect browser */
 
header("Location: index.php");
 }
 } else {
 
$message "Nombre de usuario ó contraseña invalida!";
 }
 
} else {
 
$message "Todos los campos son requeridos!";
}
    
}
?>
__________________
Desarrollo de Aplicaciones de Escritorio, Sitios Web, Audio y Video en SISGUS
  #2 (permalink)  
Antiguo 10/11/2017, 13:14
 
Fecha de Ingreso: octubre-2009
Mensajes: 261
Antigüedad: 8 años, 1 mes
Puntos: 22
Respuesta: Acceso con Hash

los algoritmos de HASH son NO reversibles, por lo tanto, al momento de hacer login debes de aplicar el mismo algoritmo sobre la contraseña introducida por el usuario y comparar la salida de ambos HASH.
  #3 (permalink)  
Antiguo 10/11/2017, 13:40
 
Fecha de Ingreso: octubre-2008
Ubicación: Colombia
Mensajes: 315
Antigüedad: 9 años, 1 mes
Puntos: 1
Respuesta: Acceso con Hash

Correcto, pero qué debo hacer, donde debo pponer y qué codigo? Soy novato
__________________
Desarrollo de Aplicaciones de Escritorio, Sitios Web, Audio y Video en SISGUS
  #4 (permalink)  
Antiguo 10/11/2017, 14:25
 
Fecha de Ingreso: octubre-2009
Mensajes: 261
Antigüedad: 8 años, 1 mes
Puntos: 22
Respuesta: Acceso con Hash

Cita:
Iniciado por karenlorenadg Ver Mensaje
Correcto, pero qué debo hacer, donde debo pponer y qué codigo? Soy novato
he sido bastante claro: al momento de hacer login debes de aplicar el mismo algoritmo sobre la contraseña introducida por el usuario y comparar la salida de ambos HASH

¿tan difícil es interpretar una instrucción?
  #5 (permalink)  
Antiguo 10/11/2017, 14:37
 
Fecha de Ingreso: octubre-2008
Ubicación: Colombia
Mensajes: 315
Antigüedad: 9 años, 1 mes
Puntos: 1
Respuesta: Acceso con Hash

Cita:
Iniciado por sustentio Ver Mensaje
he sido bastante claro: al momento de hacer login debes de aplicar el mismo algoritmo sobre la contraseña introducida por el usuario y comparar la salida de ambos HASH

¿tan difícil es interpretar una instrucción?
Disculpa pero en verdad pido ayuda porque no conozco bien sobre el tema de hash, deberias ser un poco humilde en tus respestas o dejas que alguien mas con ganas de ayudar lo haga. No me mal interpetes pero es asi. Como dije conozoco poco del tema de hash por eso pido ayuda. El registro lo hice buscando en internet pero hasta el momento no he podido leer el login. Muchas gracias
__________________
Desarrollo de Aplicaciones de Escritorio, Sitios Web, Audio y Video en SISGUS
  #6 (permalink)  
Antiguo 10/11/2017, 19:09
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.732
Antigüedad: 9 años, 3 meses
Puntos: 2112
Respuesta: Acceso con Hash

Código PHP:
Ver original
  1. // Cambia:
  2. $password = $_POST['password'];
  3.  
  4. // Por:
  5. $password = password_hash($_POST['password'], PASSWORD_DEFAULT, array("cost"=>12));

De esta forma, compararás el hash de la contraseña introducida por el usuario con el hash guardado en la base de datos.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 10/11/2017, 22:04
 
Fecha de Ingreso: octubre-2008
Ubicación: Colombia
Mensajes: 315
Antigüedad: 9 años, 1 mes
Puntos: 1
Respuesta: Acceso con Hash

Cita:
Iniciado por Triby Ver Mensaje
Código PHP:
Ver original
  1. // Cambia:
  2. $password = $_POST['password'];
  3.  
  4. // Por:
  5. $password = password_hash($_POST['password'], PASSWORD_DEFAULT, array("cost"=>12));

De esta forma, compararás el hash de la contraseña introducida por el usuario con el hash guardado en la base de datos.
No amigo, no funciona, seguro que solo es cambiar ahii y listo?
__________________
Desarrollo de Aplicaciones de Escritorio, Sitios Web, Audio y Video en SISGUS
  #8 (permalink)  
Antiguo 10/11/2017, 22:39
 
Fecha de Ingreso: septiembre-2015
Mensajes: 142
Antigüedad: 2 años, 2 meses
Puntos: 13
Respuesta: Acceso con Hash

Tienes que usar
Cita:
password_verify() - Comprueba que la contraseña coincida con un hash
te lo puse en otro tema pero lo borrarían.

http://php.net/manual/es/function.password-verify.php
  #9 (permalink)  
Antiguo 11/11/2017, 07:32
 
Fecha de Ingreso: octubre-2008
Ubicación: Colombia
Mensajes: 315
Antigüedad: 9 años, 1 mes
Puntos: 1
Respuesta: Acceso con Hash

Cita:
Iniciado por sonystar_17 Ver Mensaje
Tienes que usar
te lo puse en otro tema pero lo borrarían.

http://php.net/manual/es/function.password-verify.php

hice esto pero tampoco me funciona, no se si es que lo estoy haciendo en el sitio equivocado. Me sale este error

Notice: Undefined variable: hash in C:\xampp\htdocs

Código PHP:
if (password_verify('password'$hash)) {
    echo 
'¡La contraseña es válida!';
} else {
    echo 
'<center><h4>La contraseña no es válida.</h4></center>';

__________________
Desarrollo de Aplicaciones de Escritorio, Sitios Web, Audio y Video en SISGUS
  #10 (permalink)  
Antiguo 11/11/2017, 09:08
 
Fecha de Ingreso: octubre-2008
Ubicación: Colombia
Mensajes: 315
Antigüedad: 9 años, 1 mes
Puntos: 1
Busqueda Respuesta: Acceso con Hash

Hice esto para ser mas exacto

Código PHP:


if(isset($_SESSION["session_username"])){
// echo "Session is set"; // for testing purposes
header("Location: index.php");
}
 
if(isset(
$_POST["login"])){
 
if(!empty(
$_POST['username']) && !empty($_POST['password'])) {
 
$username=$_POST['username'];
 
$password=$_POST['password'];
     
    
    
    if (
password_verify('$password'$hash, array("cost"=>12))) {
    echo 
'¡La contraseña es válida!';
} else {
    echo 
'<center><h4>La contraseña no es válida.</h4></center>';

me sales este error

Notice: Undefined variable: hash in

Warning: password_verify() expects exactly 2 parameters, 3 given in
__________________
Desarrollo de Aplicaciones de Escritorio, Sitios Web, Audio y Video en SISGUS
  #11 (permalink)  
Antiguo 11/11/2017, 10:10
Avatar de hhs
hhs
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.844
Antigüedad: 4 años, 4 meses
Puntos: 338
Respuesta: Acceso con Hash

Te sale ese mensaje porque en tu código no existe ninguna variable hash, necesitas adaptar el ejemplo a tu código.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #12 (permalink)  
Antiguo 11/11/2017, 13:22
 
Fecha de Ingreso: octubre-2008
Ubicación: Colombia
Mensajes: 315
Antigüedad: 9 años, 1 mes
Puntos: 1
Busqueda Respuesta: Acceso con Hash

Correcto, pero es ahi el inconveniente que no sé cómo adaptarlo, he hecho muchas cosas y ningunas me ha funcionado. Ahi está mi codigo. ¿Qué debo hacer?
__________________
Desarrollo de Aplicaciones de Escritorio, Sitios Web, Audio y Video en SISGUS
  #13 (permalink)  
Antiguo 11/11/2017, 23:43
 
Fecha de Ingreso: septiembre-2015
Mensajes: 142
Antigüedad: 2 años, 2 meses
Puntos: 13
Respuesta: Acceso con Hash

mira este ejemplo y guíate

Código PHP:
Ver original
  1. $pass = '123456';
  2.  
  3. $hash = password_hash($pass, PASSWORD_BCRYPT);
  4.  
  5. if (password_verify($pass, $hash)) {
  6.    return true;
  7. } else {
  8.     return false;
  9. }
  #14 (permalink)  
Antiguo 12/11/2017, 12:34
 
Fecha de Ingreso: septiembre-2013
Ubicación: Madrid
Mensajes: 59
Antigüedad: 4 años, 1 mes
Puntos: 6
Respuesta: Acceso con Hash

Hola,
Primero tienes que saber 2 cosas sobre hash:
- No es reversible (en teoría)
- Los hash actuales no tienen el mismo valor sobre la misma entrada. Es decir, password_hash('1234', PASSWORD_BCRYPT) cada vez que lo ejecutes te va a dar un resultado diferente. No es como SHA.

Una vez comprendido eso el siguiente paso es entender el flujo de verificación de hash:
- Un usuario al registrarse te da una contraseña en texto plano
- Sobre esta contraseña aplicas algoritmo de hash que es el que guardas en BBDD asociado a su usuario
- Cuando el usuario hace login te da su nombre de usuario que es el que consultas sobre la BBDD
- Si el usuario existe tendrás el valor de su hash de contraseña.
- Verificas que el texto plano que te ha pasado sea equivalente al hash que tienes en BBDD
- Si es equivalente todo ok. Si no pues la contraseña está mal.

¿Cómo quedaría el código?

Código PHP:
Ver original
  1. <?php
  2. ?>
  3. <?php
  4. require_once("conexion.php");
  5. ?>
  6. <?php
  7. $contador=0;
  8. if(isset($_SESSION["session_username"])){
  9.     // echo "Session is set"; // for testing purposes
  10.     header("Location: index.php");
  11. }
  12.  
  13. if(isset($_POST["login"])){
  14.     if(!empty($_POST['username']) && !empty($_POST['password'])) {
  15.  
  16.         $username=$_POST['username'];
  17.         $password=$_POST['password'];
  18.  
  19.         $query = mysql_query("SELECT * FROM loggeous WHERE '" . $username . "' = username LIMIT 1");
  20.  
  21.         $numrows = mysql_num_rows($query);
  22.         if($numrows != 0)
  23.         {
  24.             $row = mysql_fetch_assoc($query);
  25.             {
  26.                 $dbusername=$row['username'];
  27.                 $dbpassword=$row['password'];
  28.                 $dbnombre = $row['nombre'];
  29.                 $id = $row['cod_us'];
  30.                 $correo = $row['email'];
  31.                 $telefono = $row['celphone'];
  32.                 $tipo_usuario = $row['tipo_usuario'];
  33.                 $foto = $row['img_profile'];
  34.             }
  35.  
  36.             if(password_verify($password, $dbpassword))
  37.             {
  38.                 $_SESSION['session_username']=$username;
  39.                 $_SESSION['nombre_usuario'] = $dbnombre;
  40.                 $_SESSION['cod_us'] = $id;
  41.                 $_SESSION['email'] = $correo;
  42.                 $_SESSION['celphone'] = $telefono;
  43.                 $_SESSION['tipo_usuario'] = $tipo_usuario;
  44.                 $_SESSION['password'] = $password;
  45.                 $_SESSION['img_profile'] = $foto;
  46.                 /* Redirect browser */
  47.                 header("Location: index.php");
  48.             }else{
  49.                 $message = "La contraseña está mal";
  50.             }
  51.         } else {
  52.             $message = "El usuario no existe!";
  53.         }
  54.  
  55.     } else {
  56.         $message = "Todos los campos son requeridos!";
  57.     }
  58.  
  59. }
  60. ?>

Aún así tienes mucho código por mejorar pero eso te lo dará la experiencia.

Suerte con tu aplicación,
Un abrazo
  #15 (permalink)  
Antiguo 13/11/2017, 11:05
 
Fecha de Ingreso: octubre-2008
Ubicación: Colombia
Mensajes: 315
Antigüedad: 9 años, 1 mes
Puntos: 1
Respuesta: Acceso con Hash

Cita:
Iniciado por sonystar_17 Ver Mensaje
mira este ejemplo y guíate

Código PHP:
Ver original
  1. $pass = '123456';
  2.  
  3. $hash = password_hash($pass, PASSWORD_BCRYPT);
  4.  
  5. if (password_verify($pass, $hash)) {
  6.    return true;
  7. } else {
  8.     return false;
  9. }
Hola, tu ejemplo lo apliqué pero me devuelve al login.php en blanco no carga asolutamente ninguna info.
__________________
Desarrollo de Aplicaciones de Escritorio, Sitios Web, Audio y Video en SISGUS
  #16 (permalink)  
Antiguo 13/11/2017, 11:07
 
Fecha de Ingreso: octubre-2008
Ubicación: Colombia
Mensajes: 315
Antigüedad: 9 años, 1 mes
Puntos: 1
Busqueda Respuesta: Acceso con Hash

Cita:
Iniciado por chivacker Ver Mensaje
Hola,
Primero tienes que saber 2 cosas sobre hash:
- No es reversible (en teoría)
- Los hash actuales no tienen el mismo valor sobre la misma entrada. Es decir, password_hash('1234', PASSWORD_BCRYPT) cada vez que lo ejecutes te va a dar un resultado diferente. No es como SHA.

Una vez comprendido eso el siguiente paso es entender el flujo de verificación de hash:
- Un usuario al registrarse te da una contraseña en texto plano
- Sobre esta contraseña aplicas algoritmo de hash que es el que guardas en BBDD asociado a su usuario
- Cuando el usuario hace login te da su nombre de usuario que es el que consultas sobre la BBDD
- Si el usuario existe tendrás el valor de su hash de contraseña.
- Verificas que el texto plano que te ha pasado sea equivalente al hash que tienes en BBDD
- Si es equivalente todo ok. Si no pues la contraseña está mal.

¿Cómo quedaría el código?

Código PHP:
Ver original
  1. <?php
  2. ?>
  3. <?php
  4. require_once("conexion.php");
  5. ?>
  6. <?php
  7. $contador=0;
  8. if(isset($_SESSION["session_username"])){
  9.     // echo "Session is set"; // for testing purposes
  10.     header("Location: index.php");
  11. }
  12.  
  13. if(isset($_POST["login"])){
  14.     if(!empty($_POST['username']) && !empty($_POST['password'])) {
  15.  
  16.         $username=$_POST['username'];
  17.         $password=$_POST['password'];
  18.  
  19.         $query = mysql_query("SELECT * FROM loggeous WHERE '" . $username . "' = username LIMIT 1");
  20.  
  21.         $numrows = mysql_num_rows($query);
  22.         if($numrows != 0)
  23.         {
  24.             $row = mysql_fetch_assoc($query);
  25.             {
  26.                 $dbusername=$row['username'];
  27.                 $dbpassword=$row['password'];
  28.                 $dbnombre = $row['nombre'];
  29.                 $id = $row['cod_us'];
  30.                 $correo = $row['email'];
  31.                 $telefono = $row['celphone'];
  32.                 $tipo_usuario = $row['tipo_usuario'];
  33.                 $foto = $row['img_profile'];
  34.             }
  35.  
  36.             if(password_verify($password, $dbpassword))
  37.             {
  38.                 $_SESSION['session_username']=$username;
  39.                 $_SESSION['nombre_usuario'] = $dbnombre;
  40.                 $_SESSION['cod_us'] = $id;
  41.                 $_SESSION['email'] = $correo;
  42.                 $_SESSION['celphone'] = $telefono;
  43.                 $_SESSION['tipo_usuario'] = $tipo_usuario;
  44.                 $_SESSION['password'] = $password;
  45.                 $_SESSION['img_profile'] = $foto;
  46.                 /* Redirect browser */
  47.                 header("Location: index.php");
  48.             }else{
  49.                 $message = "La contraseña está mal";
  50.             }
  51.         } else {
  52.             $message = "El usuario no existe!";
  53.         }
  54.  
  55.     } else {
  56.         $message = "Todos los campos son requeridos!";
  57.     }
  58.  
  59. }
  60. ?>

Aún así tienes mucho código por mejorar pero eso te lo dará la experiencia.

Suerte con tu aplicación,
Un abrazo
Nada amigo, este ejemplo tampoco me cargó. Sigo sin entrar
__________________
Desarrollo de Aplicaciones de Escritorio, Sitios Web, Audio y Video en SISGUS
  #17 (permalink)  
Antiguo 15/11/2017, 20:28
Avatar de haggenx  
Fecha de Ingreso: febrero-2007
Ubicación: México
Mensajes: 782
Antigüedad: 10 años, 9 meses
Puntos: 20
Respuesta: Acceso con Hash

supongo que esta linea encripta tu password:
$d =password_hash($password, PASSWORD_DEFAULT, array("cost"=>12));

y con esta recuperas de tu bd el password (debe de estar encriptado para que funcione el truco)
$password=$row['password'];

ahora, cuando el usuario cree o cambie su password, guardalo en la bd (encriptado), luego cuando hagas la consulta compara si $d == $password, si son iguales puede pasar el usuario, de lo contrario muestrale un mensaje de error.
__________________
Mi blog informático http://marjuanm.blogspot.mx
Fanpage del blog https://www.facebook.com/pages/Mis-p...36397183215592
  #18 (permalink)  
Antiguo 17/11/2017, 18:10
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.689
Antigüedad: 8 años, 2 meses
Puntos: 193
Respuesta: Acceso con Hash

Si ya se tiene funcionando la encriptación al guardar,
y el dato queda guardado ya encriptado en la bd,
¿por qué al loguearse no se usa lo mismo para el dato digitado?
Actualmente lo que se hace es recibir por post el dato,
y se va a hacer el query a la bd con el dato SIN encriptar,
y pues así jamás va a coincidir....

Por ende, no entrará a las demás condiciones,
y claramente, esta de más las condiciones de comparar usuario y password
nuevamente cuando el query a la base de datos ya lo hace.
¿Solución?
Encriptar el dato recibido por post del password,
y este dato encriptado si pasarlo a la consulta sql.

__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com



La zona horaria es GMT -6. Ahora son las 06:01.