lunes, 9 de septiembre de 2013

Codificación Cesar

Imos realizar un pequeno exercicio de criptografía, mediante o famoso método cesar, atribuido ó mesmísimo Xulio César.

Podedes atopar información sobre este método de codificación e os sistemas de decodificación aplicables na wikipedia (http://es.wikipedia.org/wiki/Cifrado_C%C3%A9sar).


En primeiro lugar creamos un ficheiro HTML que amose en pantalla un formulario para recoller os datos que imos codificar:




<!DOCTYPE html>
<HTML>
<HEAD>
 <TITLE>Formularios</TITLE>
 <!-- Metadatos -->
 <META http-equiv="Content-Type" content="text/html;charset=utf-8">
 <META name="author" content="Vicente Arosa">
 <META name="generator" content="Notepad ++">
</HEAD>
<BODY style="color:black; background-color:white">
 <h2>Formulario encriptacion mediante metodo cesar</h2>

 <FORM name="form001" action="002_cesarEncriptarDesencriptarDesdeFormulario.php" method="get">
  Introduza o texto a codificar: <br>
  <input type="text" name="texto"></input><br>
  Introduza o salto de codificación / decodificacion: <br>
  <input type="text" name="salto"></input><br> 
  
  <input type="submit" value="Codificar / Decodificar"></input>
 </FORM>
</BODY>
</HTML>



Esta páxina envía os datos mediante o método get a unha páxina php que os procesará no servidor, e amosará os resultados no navegador.

Neste caso podería usarse, para o envío, tamén o método post, pero eliximos o método get para poder comprobar na dirección que os datos se envían correctamente.


Cubrimos o formulario:











Pulsamos o botón "Codificar / Decodificar", co que se producirá a chamada á páxina PHP:



Pódese comprobar na parte final da dirección que os datos se envían correctamente.

O código da páxina PHP será o seguinte:






<!DOCTYPE html>
<HTML>
<HEAD>
 <TITLE>Encriptacion cesar</TITLE>
 <!-- Metadatos -->
 <META http-equiv="Content-Type" content="text/html;charset=utf-8">
 <META name="author" content="Vicente Arosa">
 <META name="generator" content="Notepad ++">
 
</HEAD>
<BODY>
 <h2>Encriptacion cesar</h2>

 <?php
  function letraCesar ($letraSinEncriptar, $salto){
   //obtense o codigo ascii da letra a encriptar
   $codigoLetraSinEncriptar = ord ($letraSinEncriptar);
   //sumase tres o codigo da letra a encriptar
   //obtendo o codigo da letra encriptada
   $codigoLetraEncriptada = $codigoLetraSinEncriptar + $salto;
   //obtense o caracter encriptado a partir do seu codigo
   $letraEncriptada = chr ($codigoLetraEncriptada);
   
   //devolvese a letra encriptada
   return $letraEncriptada;
  }
  
 
  function textoCesar ($textoSinEncriptar, $salto) {
   $letraEncriptada;
   $textoEncriptado = "";
   //recorrese toda a cadea
   for ($i = 0; $i < strlen($textoSinEncriptar); $i++){
    //enviase cada letra a encriptar
    $letraEncriptada = letraCesar (substr($textoSinEncriptar, $i, 1), $salto);
    //engadese a letra encriptada á cadea a retornar
    $textoEncriptado = $textoEncriptado . $letraEncriptada;
   }
   
   return $textoEncriptado;
  }
 
  $v1 = textoCesar ($_GET["texto"], $_GET["salto"]);
  echo ($v1);
  echo ("<br>");
 ?>
 
</BODY>
</HTML>


Como se pode comprobar, se subdivide o problema en dous subproblemas, creando unha función para resolver cada un deles. 

En primeiro lugar o problema da codificación se reduce a codificar cada unha das letras, polo que se crea a función letraCesar que docificará unha única letra, devolvendoa codificada. 

O segundo problema redúcese a repetir este proceso para cada letra da mensaxe a codificar, deste traballo se encarga a función textoCesar. Finalmente o único que é preciso e realizar unha chamada a esta última función co texto correcto, o cal se recibe a través do array asociativo $_GET.

O resultado é o seguinte:
 
Dada a naturaza da encriptación Cesar o proceso de encriptación é o mesmo que o de desencriptación pero cambiando o signo do salto, neste caso para decodificar un texto codificado será suficiente con indicar que o salto é o mesmo aplicado na codificación, pero en signo negativo.
No caso do exemplo, decodificaremos "Krod" con salto -3:
O proceso se pode ver no seguinte vídeo:

No hay comentarios:

Publicar un comentario