Wednesday, 23. December 2009, 17:57:51
Quetal gente!, bueno esta es la clase en PHP que realiza el cifrado/Descifrado. Aclaro que esta Cifra tambien es muy conocida como ROT13, donde se traspone cada caracter con la semilla 13. Este código también está implementado como una funcion de PHP, aunque para este caso se muestra el algoritmo de como obternlo Guiñar.
Clase Caesar
<?php
/*****************************************************************************
* Nombre : Caesar.php
* Implementación del cifrado de cesar para Project-RIC. Este cifrado usa una clave de
* sustitución simple. En la actualidad existen muchos codes similares a este y el mas
* conocido se llama Rot13, el cual realiza una rotacion de 13 caracteres la cadena original.
* @copyLeft : Project-RIC
* @package : RiCrypt
* @author : D-m-K, d4rk.m0nk3y@gmail.com, my.opera.com/d-m-k
/******************************************************************************/
class Caesar {
var $charset;
var $txt;
var $rot;
/*****************************************************************************
* Constructor
* Cifra la cadena pasada como parametro realizando la sustitucion
* de la cadena original la cantidad de veces definida en el parametro
* @param $s = Cadena original
* $n = Cantidad de rotaciones a cada letra
******************************************************************************/
public function __construct($s, $n) {
$this->charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";//Definicion del charset
$this->txt = $s;
$this->rot = $n;
}
/*****************************************************************************
* Funcion : encode
* Cifra la cadena pasada como parametro realizando la sustitucion
* de la cadena original la cantidad de veces definida en el parametro
* @return $result = Mensaje cifrado
*****************************************************************************/
function encode(){
$result = "";//Variable donde queda el resultado
for($i=0; $i<strlen($this->txt); $i++) //Realizo la sustitución de cada caracter
$result .= $this->rotate($this->txt{$i}, $this->rot);//Invoco funcion que hace la rotacion
return $result;//Devuelvo la cadena Cifrada =)
}
/*****************************************************************************
* Funcion : decode
* Cifra la cadena pasada como parametro realizando la sustitucion
* de la cadena original la cantidad de veces definida en el parametro
* @return $result = Mensaje Descifrado
*****************************************************************************/
function decode(){
$result = "";//Variable donde queda el resultado
for($i=0; $i<strlen($this->txt); $i++) //Realizo la sustitución de cada caracter
$result .= $this->rotate($this->txt{$i}, -$this->rot);//Invoco funcion que hace la rotacion
return $result;//Devuelvo la cadena DesCifrada =)
}
/*****************************************************************************
* Funcion : rotate
* Realiza la rotacion de un caracter sobre el charset dependiendo el valor 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 sustitucion de la cadena con el charset
$n %= $tamC;//Semilla ó rotacion
$c = strtoupper($c);//Convierto a mayuscula el 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 < 0){//Evaluo que el indice sea mayor a 0
$k += $tamC;
}else
$k %= $tamC;
$result .= $this->charset{$k};//Obtengo del charset el indice de $k, que es el nuevo valor
}else{
$result .= $c;//Dejo el caracter sin modificaciones
}
return $result;//Devuelvo el caracter con el nuevo valor
}
}
?>
Implementacion de la Cifra de Caesar
<?php
include 'Caesar.php';//Incluyo la clase
$mensaje = $_POST['mensaje'];//Mensaje a cifrar
$semilla = $_POST['semilla'];//Semilla o cantidad de rotaciones al mensaje
$tarea = $_POST['tarea'];//Boton pulsado por el usuario
$salida = "";//Variable que guarda el mensaje
//Aqui esta la magia
if($_POST && $mensaje != "" && $semilla != ""){
//CIFRADO DEL MENSAJE
if($_POST['tarea'] == "Cifrar"){
$cipher = new Caesar($mensaje, $semilla);
$salida = $cipher->encode();
}
//DESCIFRADO DEL MENSAJE
if($_POST['tarea'] == "DesCifrar"){
$cipher = new Caesar($mensaje, $semilla);
$salida = $cipher->decode();
}
}
?>
<html>
<head>
.:: Implementacion de la cifra de Caesar ::.
</head>
<body>
Caesar
<form method="post">
Mensaje a cifrar / descifrar :
<textarea name="mensaje" style="width:500px;border:1px solid #555"><?php echo $_POST['mensaje']; ?></textarea>
Semilla :
<input type="text" name="semilla" style="width:30px;border:1px solid #555" value="<?php echo $_POST['semilla']; ?>"> |
<input type="submit" name="tarea" value="Cifrar"> |
<input type="submit" name="tarea" value="DesCifrar">
</form>
<?php
//Muestro el mensaje de salida
if($salida != ""){
echo " Resultado del criptograma
\n";
echo "" . $salida . "
";
}
?>
</body>
</html>
Greetings to all and happy Bandwidth