[Tutorial] Encriptar password y login básico [Xt3mP]

Iniciado por Xt3mP, Marzo 19, 2010, 01:19:36 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Marzo 19, 2010, 01:19:36 AM Ultima modificación: Marzo 27, 2014, 06:12:05 PM por Expermicid
#########################################################################

En este tutorial trataré de enseñarles como encriptar una clave con varios métodos lo cuál si logran desencriptar una parte quedará todavía demasiado por desencriptar así que pues prácticamente nuestro login sería totalmente (en su mayoría) seguro.

Consistirá en 5 páginas, dos HTML (Registro y Login), 3 PHP que una sería la que llevará acabo el registro, la otra sería la conexión a la base de datos y la última sería comprobar el login.

Comenzarémos con el archivo config.php:

Código: php

<?php
$dbhost="localhost"; //Host del db
$dbuser="xt3mpme_user"; //Usuario del db
$dbpass="xt3mpme_pass"; //Password del db
$db="xt3mpme_users"; //db donde se creara la tabla users
mysql_connect("$dbhost","$dbuser","$dbpass");
mysql_select_db("$db");
//Ya explique para que sirve cada variable.
?>


Una vez hecho esto comenzarémos con el formulario de registro que se llamará registrar.html el cuál será demasiado simple para que lo tomen simplemente como referencia:

Código: html5

<form action="registrar.php" method="POST">
Usuario:<br>
<input type="text" name="user" id="user"><br>
Password:<br>
<input type="password" name="passwd" id="passwd"><br>
Repetir Password:<br>
<input type="password" name="passwd2" id="passwd2">
<input type="submit" value="Registrar" id="submit">


Una vez hecho esto, seguirémos finalmente con la encriptación la cuál en está si explicaré mas o menos lo que sería la encriptación, se llamará registrar.php:

Código: php

<?php
include('config.php');//Incluimos la conexion a la base de datos.
if (($_POST['user']== '') or ($_POST['passwd']== '') or ($_POST['passwd2']== '')){
echo "Te faltaron rellenar campos";
}else{
if($_POST['passwd'] != $_POST['passwd2']){
echo "Las contrasenas no coinciden";
}else{
$user = stripslashes($_POST["user"]);
$user = strip_tags($user);
// Quitamos las etiquetas html y lo relacionado a el usuario.
$pass = stripslashes($_POST["passwd"]);
$pass = strip_tags($pass);
// Quitamos las etiquetas html y lo relacionado a el password.
/* _____________________________________ */
// Comenzamos con la encriptacion a el estilo de Xt3mP.
$pass_encriptada1 = md5 ($pass); //Encriptacion nivel 1
$pass_encriptada2 = crc32($pass_encriptada1); //Encriptacion nivel 1
$pass_encriptada3 = crypt($pass_encriptada2, "xtemp"); //Encriptacion nivel 2
$pass_encriptada4 = sha1("xtemp".$pass_encriptada3); //Encriptacion nivel 3
// Aqui será demasiado dificil poder llegar a la password verdadera ya que por ejemplo, podrian desencriptar el md5 pero aún faltaria demasiado.
$usuarios = mysql_query("SELECT usuarios FROM cuentas WHERE usuarios='$user' ");
// Seleccionamos el campo usuarios de la tabla cuentas en donde el usuario es el que escriben en el campo user
if($usuarios2 = mysql_fetch_array($usuarios))
{
echo 'El usuario '.$user.' ya esta registrado';
mysql_free_result($usuarios);
// Liberamos la memoria
}else{
mysql_query("INSERT INTO cuentas (usuarios,pass) values ('$user','$pass')");
//Insertamos los valores de el user y pass en los campos usuarios y pass de la tabla cuentas
echo "El usuario '.$user.' ha sido registrado con éxito.';
//Decimos que el usuario ha sido registrado, etc.
}
}
}
?>


Ahora procederémos a hacer el login.html:

Código: html

<form action="logear.php" method="POST">
User:<br>
<input type="text" name="user" id="pass"><br>
Pass:<br>
<input type="password" name="pass" id="pass"><br>
<input type="submit" value="Logear" id="submit">


Creo que ya le entienden, así que haremos el logear.php:

Código: php

<?php
include('config.php'); //Incluimos la conexion a la base de datos.
if( ($_POST["user"] == '') or ($_POST["pass"] == '') )
{
echo "Necesitas introducir datos de logeo";
}else{
$user = $_POST['user'];
$pass = $_POST['pass'];
$pass_encriptada1 = md5 ($pass); //Encriptacion nivel 1
$pass_encriptada2 = crc32($pass_encriptada1); //Encriptacion nivel 1
$pass_encriptada3 = crypt($pass_encriptada2, "xtemp"); //Encriptacion nivel 2
$pass_encriptada4 = sha1("xtemp".$pass_encriptada3); //Encriptacion nivel 3
$usuarios = mysql_query("SELECT * FROM cuentas WHERE usuarios='$user' and pass='$pass_encriptada4'");
//Comprobamos que si el usuario y la pass introducidas existan
if($usuarios2 = mysql_fetch_array($usuarios))
{
//Si existen los datos introducidos registraremos dos sesiones
session_register("login");
session_register("user");
$_SESSION['login'] = "SI";//Le damos el valor SI a la sesion login.
$_SESSION['user'] = $usuarios2["usuarios"];//Le damos el valor del nombre de usuario a la sesion user.
echo '<script language="JavaScript" type="text/javascript">
alert("Bienvenido.");//Mostramos alerta de bienvenida
</script>';
echo "<meta http-equiv='Refresh' content='2;url=index.php'>";//Redirigimos a nuestro index
}else{
echo 'Username y Password incorrecto.';
}
}
}
?>


Ahora un PLUS, mostrar contenido si es que esta logeado:

Código: php

<?php
if ($_SESSION['login'] = "SI"){//Si la Sesion LOGIN es igual a SI (Se registro si nos logeamos bien)
echo "Hola: ".$_SESSION['user'];
}else{//Si la Sesion LOGIN no es si (Se registro si nos logeamos bien)
echo "Esta seccion es prohibida";
}
?>


Y eso sería todo, no es fácil ni díficil, es intermedio, los resultados de la password si ponemos xt3mp sería:

Encriptación MD5: 0fcf520c7c5f6a56b69244eeb9bfb98d
Encriptación MD5/crc32: -521765068
Encriptación MD5/crc32/Semilla: xtOtXrnGfYSMM
Encriptación MD5/crc32/Semilla/sha1: fa097e6b9dd4149f78b3e8c9917ff9eb38995da8

La base de datos realmente no sería díficil, si necesitan el código de crear base de datos por phpMyADMIN me lo hacen saber.

Saludos.
Cada vez que me das Karma me motivas