Encriptar contraseñas en MD5

  • Autor Autor DavidVaz
  • Fecha de inicio Fecha de inicio
D

DavidVaz

Beta
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Buenos días chicos,

Necesitaría vuestra ayuda para modificar este código y poder encriptar las contraseñas en md5, ya que llevo un rato tocándolo y por mi inexperiencia no he conseguido hacerlo funcionar.

El código en login.php es este:

Insertar CODE, HTML o PHP:
<?php defined('DS') OR die('Acceso directo no permitido.');

$users = array(
 "usuario1" => "@pass1",
 "usuario2" => "@pass2"
);

if(isset($_GET['logout'])) {
    $_SESSION['username'] = '';
    header('Location:  ' . $_SERVER['PHP_SELF']);
}

if(isset($_POST['username'])) {
    if($users[$_POST['username']] !== NULL && $users[$_POST['username']] == $_POST['password']) {   
  $_SESSION['username'] = $_POST['username'];
  header('Location:  ' . $_SERVER['PHP_SELF']);
    }else {
        //invalid login
  echo "<p>Usuario o contraseña incorrectos</p>";
    }
}

echo '<form method="post" action="'.SELF.'">
  <h2>INICIAR SESIÓN</h2>
  <p><label for="username">Usuario</label> <input type="text" id="username" name="username" value="" /></p>
  <p><label for="password">Contraseña</label> <input type="password" id="password" name="password" value="" /></p>
  <p><input type="submit" name="submit" value="Iniciar sesión" class="button"/></p>
  </form>';
exit; 
?>

El código en index.php es este:

Insertar CODE, HTML o PHP:
<?php 
session_start(); 

define('DS',  TRUE); // used to protect includes
define('USERNAME', $_SESSION['username']);
define('SELF',  $_SERVER['PHP_SELF'] );

if (!USERNAME or isset($_GET['logout']))
 include('login.php');
 
 ?>

(aquí abajo está el código de mi página)

El código en logout.php es este:

Insertar CODE, HTML o PHP:
<?php   
session_start(); //to ensure you are using same session
session_destroy(); //destroy the session
header("location:/index.php"); //to redirect back to "index.php" after logging out
exit();
?>

¡¡Muchas gracias!!:encouragement:
 
Lo primero es que veas la documentación: PHP: md5 - Manual

Lo que tienes que hacer es tomar el valor de input y pasarlo por el md5() y almacenarlo en tu base de datos.
Al momento de loguear compara el valor del input (pásalo por el md5() ) con el valor ya encriptado si los hash son iguales la contraseña es correcta, si no es incorrecta y no loguea.
 
Lo primero es que veas la documentación: PHP: md5 - Manual

Lo que tienes que hacer es tomar el valor de input y pasarlo por el md5() y almacenarlo en tu base de datos.
Al momento de loguear compara el valor del input (pásalo por el md5() ) con el valor ya encriptado si los hash son iguales la contraseña es correcta, si no es incorrecta y no loguea.

Es correcta esta respuesta aunque te pongo un ejemplo por si no te sigue quedando claro md5($_POST['password'])

Saludos,
 
Es correcta esta respuesta aunque te pongo un ejemplo por si no te sigue quedando claro md5($_POST['password'])

Saludos,

Claro tiene que pasar el valor del input, y despues compararlo con el almacenado en la base de datos para poder loguear.
 
Hola compañeros, gracias por las respuestas.

Ya, eso hice hace bastante rato, pero da el siguiente error:

Insertar CODE, HTML o PHP:
Parse error: syntax error, unexpected ';' in C:\xampp\htdocs\Web\Login\login.php on line 17

El código lo dejo así en login.php

Insertar CODE, HTML o PHP:
<?php defined('DS') OR die('Acceso directo no permitido.');

$users = array( 
 "usuario1" => "@pass1",
 "usuario2" => "@pass2",
);

if(isset($_GET['logout'])) {
    $_SESSION['username'] = '';
    header('Location:  ' . $_SERVER['PHP_SELF']);
}

if(isset($_POST['username'])) {
    if($users[$_POST['username']] !== NULL && $users[$_POST['username']] == [B][COLOR="#FF0000"]md5($_POST['password'])[/COLOR][/B] {   
  $_SESSION['username'] = $_POST['username'];
  header('Location:  ' . $_SERVER['PHP_SELF']);
    }else {
        //invalid login
  echo "<p>Usuario o contraseña incorrectos</p>";
    }
}

echo '<form method="post" action="'.SELF.'">
  <h2>INICIAR SESIÓN</h2>
  <p><label for="username">Usuario</label> <input type="text" id="username" name="username" value="" /></p>
  <p><label for="password">Contraseña</label> <input type="password" id="password" name="password" value="" /></p>
  <p><input type="submit" name="submit" value="Iniciar sesión" class="button"/></p>
  </form>';
exit; 
?>

Y si os fijáis, no tengo base de datos, la contraseña y usuario se almacenan en el propio login.php

$users = array(
"usuario1" => "@pass1",
"usuario2" => "@pass2"
);


¡¡Muchas gracias!!
 
Última edición:
Te falta cerrar un paréntesis

PHP:
if($users[$_POST['username']] !== NULL && $users[$_POST['username']] == md5($_POST['password']))

Tres horas con el fallo para que fuese un jodido paréntesis jaja

¡¡Muchas gracias!!

Por cierto, ayer me di cuenta que me aparece un fallo (que no afecta en nada, pero está ahí visible), y es el siguiente:

Notice: Undefined index: username in C:\xampp\htdocs\Web\Login\index.php on line 5

¿Como podría removerlo?

¡¡Muchas gracias nuevamente!! :welcoming::welcoming:
 

PHP:
<?php 
//No mostrara mas E_NOTICE
error_reporting(E_ALL ^ E_NOTICE);
//
defined('DS') OR die('Acceso directo no permitido.');




$users = array(
               "admin" => "admin", 
               "usuario1" => "@pass1",
               "usuario2" => "@pass2"
               );


if(isset($_GET['logout'])) {
  $_SESSION['username'] = '';
  header('Location:  ' . $_SERVER['PHP_SELF']);
}


if(isset($_POST['username'])) {
  if($users[$_POST['username']] !== NULL && $users[$_POST['username']] == md5($_POST['password'])) {   
    $_SESSION['username'] = $_POST['username'];
    header('Location:  ' . $_SERVER['PHP_SELF']);
  }else {
//invalid login
    echo "<p>Usuario o contraseña incorrectos</p>";
  }
}
echo $hola;
echo '<form method="post" action="'.SELF.'">
<h2>INICIAR SESIÓN</h2>
<p><label for="username">Usuario</label> <input type="text" id="username" name="username" value="" /></p>
<p><label for="password">Contraseña</label> <input type="password" id="password" name="password" value="" /></p>
<p><input type="submit" name="submit" value="Iniciar sesión" class="button"/></p>
</form>';
exit; 
?>
 
Última edición por un moderador:
¡¡Muchas gracias nuevamente!!

Solucionado añadiendo tu código error_reporting(E_ALL ^ E_NOTICE); en la página index.php (en login.php no hacía efecto)
 
Te recomiendo usar password_hash en lugar de md5:

PHP: password_hash - Manual

Saludos.

- - - Actualizado - - -

Y otra cosa, como una vez leí no recuerdo dónde:

Los errores se solucionan, no se ocultan.

No te recomiendo que ocultes los mensajes errores, warnings, etc (en este caso NOTICE), en lugar adapta tu código para que no te los tire.
Por ejemplo, para solucionar ese que comentaste del index username, con algo como esto lo solucionas:

PHP:
$username = isset($_POST['username']) ? $_POST['username'] : null;
 
Última edición:
Te recomiendo usar password_hash en lugar de md5:

PHP: password_hash - Manual

Saludos.

- - - Actualizado - - -

Y otra cosa, como una ves leí no recuerdo dónde:



No te recomiendo que ocultes los mensajes errores, warnings, etc (en este caso NOTICE), en lugar adapta tu código para que no te los tire.
Por ejemplo, para solucionar ese que comentaste del index username, con algo como esto lo solucionas:

PHP:
$username = isset($_POST['username ']) ? $_POST['username '] : null;

¡¡Muchas gracias!!
 
Atrás
Arriba