Howto encriptar passwords en la base de datos

Por el 1 de octubre de 2006

en: Programacion

Si estas desarrollando un sistema de proteccion para tu sitio seguramente la autentificación sea mediante un login y un password, entonces deberías plantearte cómo vas a alamacenar esas contraseñas en la base de datos.

¿Cúal es la manera más segura?

Tienes que saber que la información almacenada en la base de datos no es del todo segura porque es accesible para todos los administradores por eso debes almacenarla de tal manera que esa seguridad no se vea má comprometida, por lo tanto para asegurar nuestras contraseñas podriamos utilizar el Message-Digest Algorithm 5 (MD5).

MD5 (acrónimo de Message-Digest Algorithm 5, Algoritmo de Resumen del Mensaje 5) es un algoritmo de reducción criptográfico de 128 bits ampliamente usado. El código MD5 fue diseñado en 1991 y en 2004 fueron divulgados ciertos defectos de seguridad, lo que hará que en un futuro cercano se cambie de este sistema a otro más seguro.

Entonces te preguntarás porqué debería usar MD5 si no es un sistema del todo seguro, pues porque es rapido, fácil y potente, de hecho su gran ventaja es la facilidad y rapidez de uso.

Es de vital importancia comprender que la encriptación de las contraseñas no protegerá nuestro sitio simplemente protegera las propias contraseñas.

Primer Paso

Lo primero que podemos hacer es un pequeño script que nos introduzca un nuevo usuario en nuestra base de datos ysu respectiva contraseña encriptada con MD5.

define(“DB_SERVER”, “localhost”);
define(“DB_USER”, “usuario”);
define(“DB_PASS”, “password”);
define(“DB_NAME”, “basededatos”);
define(“TBL_USERS”, “nombredetabla”);

$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());
mysql_select_db(DB_NAME, $connection) or die(mysql_error());

function addNewUser($username, $password){
global $connection;
$password = md5($password);
$q = “INSERT INTO “.TBL_USERS.” VALUES (‘$username’, ‘$password’)”;
return mysql_query($q, $connection);
}

Segundo Paso

Comprobaremos si los datos de autentificación son correctos.

function checkUserPass($username, $password){
global $connection;

$username = str_replace(“‘”,”””,$username)
$password = md5($password);

// Verificamos que el usuario esta en la base de datos
$q = “SELECT password FROM “.TBL_USERS.” WHERE username = ‘$username’”;
$result = mysql_query($q, $connection);
if(!$result || (mysql_numrows($result) < 1)){
return 1; //Indicamos el error
}

// Devolvemos el resultado
$dbarray = mysql_fetch_array($result);

// Validamos que los datos son correctos
if($password == $dbarray['password']){
return 0; //Satisfactorio usuario y contraseña confirmadas
}
else{
return 1; //Fallo en la contraseña
}
}

Tercer Paso

Si dispones de contraseñas no encriptadas en tu base de datos y quiere probar su funcionalidad este script, puedes utilizar este otro para poder encriptar todas aquellas que no lo están.

Enlaces Interesantes

Seccion Programación (TuFunción)
Seccion PHP(TuFunción)
Tutorial básocp de AJAX
Diferencia entre PHP ASP y otros lenguajes de programación
Fácil sistema de autentificación de usuarios (PHP)
Tendencia de los lenguajes de programación
Bases de datos y PHP
Consejos para escribir código Javascript
Perl está muriendo
How to Encrypt Passwords in the Database

Dejar un comentario