Buscador


En todo Internet
En Uterra.Com

Contenidos


Sobre codificación y descodificación de información se puede hablar mucho, tanto que podríamos dedicar una Web entera a este asunto. En este artículo vamos a ver como codificar datos y por que hacerlo. Para poner en perspectiva este asunto vamos a imaginar que estamos creando una aplicación de validación de cuentas de usuario.

Cuando se crea un sistema de registro de usuarios para que estos puedan acceder a nuestra Web. El método más generalizado consiste en el envío de un mensaje a su cuenta de e-mail con un enlace que el nuevo usuario debe pulsar. Pues bien, cuando hacemos esto, en la URL que enviamos debe haber un identificador único de ese usuario. Ese identificador podría ser el nombre de usuario o su cuenta de e-mail, por ejemplo. En este caso, el nombre de usuario o la dirección de email aparecería en la URL, y dejaría a la vista de cualquiera a quien corresponde ese enlace. Para evitar esto, podemos encriptar (codificar) el nombre de usuario, la cuenta de e-mail, o el valor que nos interese.

Esto lo podemos hacer mediante una codificación en base 64 o también mediante una codificación uuencode. En ambos casos tendremos una cadena de caracteres que no será reconocible por nadie. No obstante, si alguien esta muy interesado en conocer que hay tras esos caracteres, podrá descodificarlos.

Que se conozca el nombre de usuario o la dirección de e-mail, dependiendo de los casos, puede no tener mayor relevancia, pero por otro lado, puede hacer que el usuario reciba span o bien le incomode ver como esos datos se quedan grabados en la historia de navegación de quien accede a su sección de la Web. Esto sobre todo, seria relevante cuando se pasan datos como nombre y apellidos.

Más concretamente, una dirección de validación de cuenta de usuario podría ser http://www.uterra.com/validar.php?usuario=perico. Como podemos ver, esta dirección nos desvela el nombre de usuario que se quiere validar. Para evitar esto, podemos encriptar (codificar) el nombre de usuario, y la dirección quedaría de la siguiente forma: http://www.uterra.com/validar.php?usuario=cGVyaWNv. De esta forma, ambas direcciones contienen exactamente la misma información, pero en la segunda, ya nos tendríamos que tomar las molestias de decodificar ese valor para saber a quien corresponde. De esta forma, podremos usar datos como el número de teléfono para reconocer a un usuario sin poner su teléfono a primera vista.

Conocer un nombre de usuario, teléfono o una dirección de e-mail, puede tener más o menos importancia, pero no tiene el porque ser trascendental. No obstante, si además del nombre de usuario y el e-mail, también tenemos la clave, ya tendríamos un problema de seguridad en nuestra Web muy serio. Para el caso de tener que pasar claves por URL sin desvelar su valor, podemos usar un algoritmo de encriptación no reversible.

Codificar datos no solo es relevante para la seguridad, también nos hace posible hacer cosas que de otra forma no seria posible. Imagine que está creando una enciclopedia online, y tiene que pasar los términos por URL, pero estos contienen espacios en blanco, acentos, diéresis, caracteres especiales, etc.

Presentamos a continuación cuatro formas de encriptación, dos de ellas reversibles y una tercera no reversible, son estas:

Codificacion para URLs (urlencode, urldecode): Es un tipo especial de codificacion pensado para poder pasar ciertos valores por URL.

Codificación en base 64: adecuado para codificar cualquier dato que no tenga demasiada relevancia en la seguridad. La cadena de caracteres aumenta aproximadamente un 33%.

Codificación uuencode: adecuada para la transmisión de datos. La cadena de caracteres aumenta aproximadamente un 35%.

Codificación MD5: al contrario que las anteriores, este método de encriptación no es reversible, es decir, no hay forma de llegar al valor codificado a partir de la encriptación. Convierte cualquier cadena, en una cadena de 32 caracteres hexadecimales.

Dicho esto, usa el método de codificación más adecuado para cada caso, y ten presente que, el uso inapropiado de estos métodos lleva a que nuestras aplicaciones tengan agujeros de seguridad.

Podéis usar la demo para comparar el resultado de las diferentes formas de encriptación.

El código que presentamos a continuación, agrega unos detalles, como presentar la página de resultados en una iframe situada bajo el formulario que envía los datos. La página de procesamiento, detecta si la variable que recoge los datos está o no vacía. 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"[]>
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Codificar cadenas.</title>
</head>

<body>

<form method="POST" target="profor" action="codifica.php">
    <p align="center">Cadena a codificar: <input type="text" name="cadena" size="45">&nbsp;&nbsp;
    <input type="submit" value="Codificar" name="B1"></p>
</form>

<p align="center">
<iframe src="codifica.php"  
marginwidth="0" marginheight="0" name="profor" scrolling="no" border="0" frameborder="0" width="800" height="500"> 
</iframe> 
</p>

</body>

</html>
-----------------------------------------------------------------
--------- codifica.php

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="iso-8859-1" />
    <title>Codificación en PHP.</title>

<style type="text/css"> 
<!--  
.texto {      
    font-family: verdana,arial;
    font-size: 1.0em;
    color:#FF0000; 

--> 
</style> 
</head>

<body>
<?php
// Codificacion y decodificacion de cadenas y valores numericos

$cadena $_POST["cadena"];

if (empty(
$cadena))  
{  
echo 
"<p align=\"center\">Introduzca la cadena que desea codificar.</p>";  
}  
else  


$cod_url urlencode($cadena);
$deco_url urldecode($cod_url);

$codifica1 base64_encode($cadena);
$decodifica2 base64_decode($codifica1);

$codifica3 convert_uuencode($cadena);
$decodifica4 convert_uudecode($codifica3);

// Codificado no reversible
$codifica5 md5($cadena);

echo 
"
<p>
<b>Codificado con URLenconde: </b>
<div class=\"texto\">
$cod_url</div>
Decodificado URLdecode: 
$deco_url 
</p>

<p>
<b>Codificado en base 64: </b>
<div class=\"texto\">
$codifica1</div>
Decodificado en base 64: 
$decodifica2 
</p>

<p>
<b>Codificado seguro con algoritmo uuencode: </b>
<div class=\"texto\">
$codifica3</div>
Decodificado seguro con algoritmo uuencode: 
$decodifica4 
</p>

<p>
<b>Codificación no reversible (MD5): </b>
<div class=\"texto\">
$codifica5</div>
</p>
"
;

}

?>
</body>

</html>

Código PHP

Contacto

an image

Agrégame a Favoritos

Hazme tu página de inicio