Algo de encriptación

abril 6, 2014

PHP tiene una fabulosa librería de encriptación llamada mcrypt. Si no tienes esta librería instalada en tu servidor, o eres de esos paranoicos que desea ver en todo momento como se generan los mensajes codificados, aquí tienes un sencilla librería. Puedes usarla por ejemplo, para encriptar cookies o pequeños mensajes entre usuarios.

La librería tiene 3 funciones útiles:
libreta_de_un_solo_uso($texto) que genera una clave aleatorio con la misma longitud que el texto. Mas información en la wikipedia.
encripta($texto,$llave) y desencripta($texto,$llave)
Encripta y desencripta un texto.La llave puede ser una frase (cuanto mas larga mejor) o puedes generar una libreta de un solo uso con la primera función.
-Hay una cuarta función, cipher, que es en realidad la que hace el trabajo duro.


function libreta_de_un_solo_uso($longitud=64){
	$llave="";
	if (is_string($longitud)){
		$longitud = strlen($longitud);
	}
	for($i=0;$i<$longitud;$i++){
		$llave .= chr( rand(0,255));
	}
	return $llave;
}	

function cipher($texto, $llave, $sentido=1) {
	$encriptado="";
	$max       = strlen($texto);
	$lenllave  = strlen($llave);
	$sentido   = $sentido==1 ? 1 : -1;
	for( $i=0 ; $i < $max; $i++ ) {
		$variacion  = ord($llave[$i%$lenllave]);
		$encriptado.= chr( ord($texto[$i]) + $sentido*$variacion ); 
	}
	return $encriptado;
}

function encriptar($texto, $llave) {
	return base64_encode( cipher($texto,$llave,1));
}

function desencriptar($texto, $llave) {
	return cipher(base64_decode($texto),$llave,-1);
}
	
// EJEMPLO con una frase como llave.
// elige siempre una cadena larga. Si es una cita conocida, alterala levemente.	
$llave = "HAL: I'm sorry, Dave. I'm afraid I can't do that ||| Dave Bowman: What's the problem? ";
$texto = "Lorem ipsum dolore sit amet.";
$encriptado = encriptar( $texto,$llave);
$denuevo    = desencriptar($encriptado, $llave);
echo "
$encriptado
$denuevo"; // EJEMPLO con una libreta de un solo uso (one time pad) $libreta = libreta_de_un_solo_uso($texto); $encriptado = encriptar($texto,$libreta); $denuevo = desencriptar($encriptado, $libreta); echo "
$encriptado
$denuevo ";

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: