Resulta sencillo que un ratón tenga cabeza,
basta con alargar la mano y dejar que las ideas fluyan a través de ella.

Su visita a esta página es a la vez una invitación y una provocación
A continuación les presento una serie de pequeñas muestras de mis capacidades en el campo del diseño gráfico, la fotografía, la programación y el desarrollo web. Todavía quedan muchas cosas que mostrar y demostrar pero valga para ellas este adelanto.

Invitación a mostrar.
Provocación para demostrar.
fecha de hoy: 21(Thu) - August - 2008
encriptado de cadenas con php

 

encriptado de cadenas con php.

La especialización de Internet se hace mas evidente cada día que pasa. Con mayor frecuencia sentimos la necesidad de controlar el acceso a nuestras páginas permitiendo el paso únicamente a usuarios registrados. Igualmente, los negocios a través de internet, las compras a través de la red y otros servicios obligan a personalizar el entorno adaptándose al usuario concreto. La forma de hacer esto es, nuevamente, el registro de usuarios.

No voy a analizar todo el complejo entorno que supone mantener una página con acceso de usuarios. Simplemente me voy a centrar en un punto, primordial, que es la generación de contraseñas de manera automática.

Imaginemos que disponemos de una web dedicada a la venta de libros. Como no vamos a ser menos que las grandes empresas del sector decidimos implantar un sistema de registro de usuarios para disponer de los datos necesarios para efectuar envíos, emitir facturas, informar, o simplemente llevar un control de las compras e incidencias de esa persona al visitar nuestra web.

Para que cualquiera se pueda registrar debemos crear una página con un formulario de registro que podría tener el siguiente aspecto:

formulario de registro:

nombre:
apellidos:
e-mail:
dirección:
población:
 

Como vemos, nuestro ejemplo es sencillo. Este formulario estaría incluido en una página llamada registro.htm (por ejemplo) y el método POST del mismo apuntaría a registro.php (por ejemplo).

¿Qué quiere decir apuntar a registro.php?

Simplemente que las variables que contienen los campos del formulario (nombre, apeliidos, email, etc) se envían a la página registro.php para que puedan ser procesados dichos valores.

Perfecto. En estos momentos, y tras haber pulsado el botón Enviar, los datos se envían a la página registro.php para que puedan ser comprobados. En este punto se validará que los campos estén correctamente cumplimentados (que no haya ninguno en blanco, que la dirección de correo sea válida, etc) mediante métodos que explicaremos en otra sección. Si los campos son correctos se incluirán en la base de datos de nuestro sistema (en el servidor) mediante un proceso de inclusión de datos ya descrito en esta web (ver acceso a bases de datos mySQL con php).

Ya tenemos los datos en nuestra base de datos, pero ¿y la contraseña?

Fácil. La generaremos automáticamente nosotros mismos desde la página registro.php.

Existe una función en php llamada md5 que genera una cadena de treinta y dos caracteres mediante el algoritmo de resumen de mensajes md5 a partir de una cadena dada. Es decir, esta función devolverá una cadena encriptada a partir de otra cadena que nosotros le indiquemos.

En este caso, generaremos la cadena encriptada a partir del nombre introducido en el formulario.

Imaginemos que la variable $txt_nombre en registro.php contiene el valor del nombre introducido en el formulario de la página de registro. La manera de realizar la encriptación de esta cadena sería:

$txt_nombre=md5($txt_nombre);

Veamos el siguiente ejemplo:

$txt_nombre = "Juan";
$txt_nombre=md5($txt_nombre);
print ("La cadena encriptada es: $txt_nombre \n");

Esto nos devolvería un resultado similar a:

La cadena encriptada es: 92eaf3719159c372f3d50337e0a14f57

Perfecto. Ya disponemos de la cadena encriptada a partir del nombre de usuario introducido. Pero, ¿alguien se imagina tener que introducir una contraseña semejante cada vez que queramos acceder a la página?.

¿Qué hacemos entonces?

Sencillo. Recortar.

Existe una función en php para obtener fragmentos de cadenas llamada substr y que dispone de tres argumentos: cadena, punto de inicio del corte de la cadena, longitud. Algo similar a esto:

$txt_nombre=substr($txt_nombre, $inicio, $longitud)

Donde la variable $inicio indica el punto inicial de corte de la cadena y la variable $longitud el tamaño de la misma. La variable $txt_nombre contiene el valor del nombre de usuario, en este caso ya encriptado.

Entonces, ¿ya está? ¿Le decimos que corte la cadena y listo?

Si y no. Podemos establecer un valor para la variable $longitud fijo y que nos indicará el tamaño de la contraseña que queremos generar (6, 7, 8... etc. caracteres), pero no tenemos tan claro el punto de inicio del corte de la cadena.

¿Por qué?

Si establecemos el punto de corte inicial, cualquiera que sepa el nombre de usuario de alguien puede acceder a su contraseña siguiendo los pasos indicados en este tutorial. Así que la manera de establecer el punto de corte será aleatorio para cada usuario y se realizará mediante la función rand de php. Necesitaremos, además, para establecer los límites de corte, conocer el tamaño de la cadena. Esto lo haremos mediante la función strlen. El proceso sería algo similar a esto:

$longitud_contraseña=strlen($txt_nombre);
srand ((double) microtime() * 1000000);
$inicio=rand(0,($longitud_contraseña - $longitud - 1));
$txt_nombre=substr($txt_nombre, $inicio, $longitud);

¿Qué hemos hecho?

En la primera línea asignamos a la variable $longitud_contraseña la longitud en caracteres que tiene en estos momentos el texto encriptado. (Sabemos que es 32, pero podemos utilizar otras herramientas de encriptación como crypt o encrypt que devuelven valores distintos a 32).

En la segunda y tercera línea utilizamos la función rand que genera un número aleatorio. La instrucción srand es necesaria para que el resultado devuelto por rand sea realmente aleatorio. La función rand generará un número aleatorio entre 0 y $longitud_contraseña - $longitud - 1. Este último valor será el de la longitud totoal de la cadena, menos la longitud de la contraseña que queremos generar, menos 1. En nuestro caso al utilizar la función md5 será: 32-$longitud-1.

La cuarta línea obtendrá una cadena de longitud determinada por la variable $longitud, cortada desde el punto aleatorio $inicio y obtenida de la cadena encriptada $txt_nombre.

Veamos el ejemplo completo:

$txt_nombre = "Juan";
$longitud=8;
$txt_nombre=md5($txt_nombre);
$longitud_contraseña=strlen($txt_nombre);
srand ((double) microtime() * 1000000);
$inicio=rand(0,($longitud_contraseña - $longitud - 1));
$txt_nombre=substr($txt_nombre, $inicio, $longitud);
print ("La contraseña es: $txt_nombre \n");

el resultado podría ser (dependiendo siempre del valor aleatorio que nos devuelva rnd):

La contraseña es: 59c372f3

Que, como vemos, es una cadena de 8 caracteres obtenida de la cadena encriptada:

92eaf3719159c372f3d50337e0a14f57

Ahora que ya tenemos todos los datos, simplemente deberíamos enviar por e-mail al usuario el valor de su contraseña para que pueda acceder a la página. Este proceso también puede estar automatizado y el envíod e e-mail se puede producir inmediatamente después de realizarse el proceso de generación de contraseña. (ver como enviar e-mail desde páginas en php).

Si deseas ampliar la información sobre el tema, si tienes alguna duda, o simplemente si tienes otras ideas o sugerencias no dudes en ponerte en contacto conmigo.

Gracias.
Luis Álvarez

 
La cabeza del Ratón


'nuevomilenio' es una idea de Luis Álvarez
'CSI/dilvish666' es propiedad intelectual


CSI/dilvish666 - A Coruña
nuevomilenio@retemail.es