Vous êtes sur la page 1sur 3

<?php /****************************************************************************** * Nombre : Vigenere.php * Clase para el cifrado de Vigenere para Project-RIC.

Este es un cifrado de * sustitucin polialfabetico, siendo una variacin del cifrado de cesar. La diferen cia * es que usa una palabra como semilla, la cual cada caracter representa el indi ce * del charset a ser sumado en las operaciones modulares. Esta semilla se repita cuantas * veces sea necesario hasta cifrar/descifrar toda la cadena. * @copyLeft : Project-RIC * @package : RiCrypt * @author : D-m-K, d4rk.m0nk3y@gmail.com, my.opera.com/d-m-k ******************************************************************************/ class Vigenere { charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //Definicion del charset $this->txt = strtoupper($s); $this->seed = strtoupper($seed); } /*********************************************************************** ************* * Funcion : encode * Cifra la cadena pasada como parametro realizando una sustitucion * polialfabetica a traves de sumas modulares dependiendo el indice de ca da caracter de la semilla * @param $seed = Semilla con la que sera cifrado el mensaje * @return $result = Mensaje cifrado ************************************************************************ ************/ function encode(){ $result = ""; //Cadena donde queda el resultado $x = 0; //Indice de la semilla $p = 0; //Posicion para relizar la operacion modular for($i=0; $itxt); $i++){ if(strstr($this->charset, $this->txt{$i})){//Evaluo si e xiste el caracter en el charset $x = strpos($this->charset, $this->seed{($p % st rlen($this->seed))}); $result .= $this->rotate($this->txt{$i}, $x); //Invoco funcion que hace la rotacion $p++; //Aumento el indice para la operacion modu lar }else{//Si no existe dejo el caracter evaluado $result .= $this->txt{$i}; continue; } } return $result; //Devuelvo la ca dena Cifrada =) } /*********************************************************************** ************* * Funcion : decode

* DesCifra la cadena pasada como parametro realizando una sustitucion * polialfabetica a traves de sumas modulares dependiendo el indice de ca da caracter de la semilla * @param $seed = Semilla con la que sera cifrado el mensaje * @return $result = Mensaje cifrado ************************************************************************ ************/ function decode(){ $result = ""; //Cadena donde queda el resultado $x = 0; //Indice de la semilla $p = 0; //Posicion para relizar la operacion modular for($i=0; $itxt); $i++){ if(strstr($this->charset, $this->txt{$i})){//Evaluo si e xiste el caracter en el charset $x = strpos($this->charset, $this->seed{($p % st rlen($this->seed))}); $result .= $this->rotate($this->txt{$i}, -$x); //Invoco funcion que hace la rotacion $p++; //Aumento el indice para la operacion modu lar }else{//Si no existe dejo el caracter evaluado $result .= $this->txt{$i}; continue; } } return $result; //Devuelvo la ca dena DesCifrada =) } /*********************************************************************** ****** * Funcion : rotate * Realiza la rotacion de un caracter sobre el charset dependiendo el val or de la semilla * de la cadena original la cantidad de veces definida en el parametro * @param $s = Cadena original * $n = Cantidad de rotaciones * @return $result = Valor del nuevo caracter de acuerdo al indice ************************************************************************ *****/ function rotate($c, $n){ $result = ""; //Texto de salida $tamC = strlen($this->charset); //Longitud de la cadena del charset $k = 0; //Indice para sustitucio n de la cadena con el charset $n %= $tamC; //Semilla rotacion $c = strtoupper($c); //Convierto a mayuscula el caracter //Realizo la sustitucin de cada caracter //Evaluo si el caracter en la posicion $i existe, de lo contrario //Dejo el caracter que esta por defecto if(strstr($this->charset, $c)){ $k = (strpos($this->charset, $c) + $n); if($k charset{$k}; }else{ $result .= $c; } return $result;

} } ?>

<?php /* Cifrado Vigenre */ form(); $message = strtolower(str_replace("\n"," ",$_POST['message'])); $clave= strtolower($_POST['clave']); $final = ""; $letters = explode(' ',"a b c d e f g h i j k l m n o p q r s t u v w x y z"); $saltar = explode(' ', ' \ ! | " @ # $ ~ % & / ( ) = ? \' ^ ` [ ] + * { } , ;'); for ($i = 0, $x = 0 ; $i < strlen($message); $i++, $x++) { if ($x >= strlen($clave)) $x = 0; if (in_array($message[$i],$saltar) || $message[$i] === ' ') { $final .= $message[$i]; $x--; }else { $vigenere = (array_search($message[$i],$letters) + array_search($clave[$ x],$letters) ) % 26 ; $final .= $letters[$vigenere]; } } echo '<b>Resultado encriptado:</b><br />'.strtoupper($final); function form() { echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post"> Mensaje: <br /> <textarea name="message">'.$_POST['message'].'</textarea><br /> Clave: <input type="text" name="clave" value="'.$_POST['clave'].'" / > <input type="submit" name="send" value="Enviar"> </form> '; } ?>

Vous aimerez peut-être aussi