Enviando passwords de forma segura con MD5 y PHP3

Artículo cedido por La página de Alfredo Reino.

El algoritmo MD5

El algoritmo MD5 es una funcion de cifrado tipo hash que acepta una cadena de texto como entrada, y devuelve un numero de 128 bits. Las ventajas de este tipo de algoritmos son la imposibilidad (computacional) de reconstruir la cadena original a partir del resultado, y tambien la imposibilidad de encontrar dos cadenas de texto que generen el mismo resultado.

Esto nos permite usar el algoritmo para transmitir contraseñas a traves de un medio inseguro. Simplemente se cifra la contraseña, y se envia de forma cifrada. En el punto de destino, para comprobar si el password es correcto, se cifra de la misma manera y se comparan las formas cifradas.

El ejemplo que vamos a ver ahora, se implementa un sistema de formulario de login y un script hecho en PHP3 que comprueba su validez.

Para ello, utilizamos la implementación de MD5 en JavaScript de Paul Johnston.

El formulario de Login

El siguiente documento en HTML contiene un formulario en el que el usuario introduce su nombre de usuario y una contraseña. Cuando se pulsa el botón de enviar, se añade al password un numero aleatorio, y todo ello se cifra usando el algoritmo MD5.

A continuación, el numero aleatorio, y el resultado del MD5, se introducen en elementos tipo "Hidden" en el formulario, y se envia todo a un script escrito en PHP3 que verifica el acceso.

Formulario de login
<html><head><title></title>
<script language="JavaScript" src="md5.js"></script>
<script language="JavaScript">
numero = Math.random().toString();

function calculaMD5() {
var pw = document.forms["login"].elements["password"].value
pw += numero
return calcMD5(pw)
}

function enviaMD5(hash) {
document.forms["login"].elements["cifrado"].value = hash;
document.forms["login"].elements["numero"].value = numero;
document.forms["login"].submit();
}
</script>
</head>

<body>
<form action="auth.php3" method="POST" name="login">
Usuario: <input type="Text" name="usuario"><br>
Password: <input type="Password" name="password"><br>
<input type="Hidden" name="cifrado" value="">
<input type="Hidden" name="numero" value="">
<input type="Submit" value=" Login " onClick="enviaMD5(calculaMD5())">
</form>
</body></html>

El script en PHP3

PHP3 es un lenguaje de server-side scripting, como pueda serlo el ASP, ColdFusion, etc. En este ejemplo se ha usado PHP3 porque ya lleva una implementación del algoritmo MD5. Además, PHP3 es gratuito y open source. Para más información, lo mejor es visitar http://www.php.net/

Igualmente se podría haber utilizado ASP, utilizando la misma implementación del MD5 que vimos antes, y escribiendo el script en JSCript.

Básicamente, el script extrae el password para el usuario correspondiente (la función passwordUsuario(), no está detallada en este texto). A continuación, le añade el número aleatorio que recibe del formulario, aplica el algoritmo MD5, y lo compara con el valor del password cifrado que recibe del formulario.

Instalación de Apache/Php
<html><head><title></title></head>
<body>

<?
$password = passwordUsuario($usuario);

$serverpassword = strtolower(md5($password.$numero));
$clientpassword = strtolower($cifrado);

if ($serverpassword==$clientpassword)
{ print "<p>Correcto!"; }
else
{ print "<p>Acceso denegado!"; }
?>

</body></html>

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR