Menú Cerrar
Decodificador de César

El decodificador César, en criptografía, también conocido como cifrado César, cifrado por desplazamiento, código de César o desplazamiento de César, es una de las técnicas de cifrado más simples y más usadas. Es un tipo de cifrado por sustitución en el que una letra en el texto original es reemplazada por otra letra que se encuentra un número fijo de posiciones más adelante en el alfabeto. Por ejemplo, con un desplazamiento de 5, la A se sustituye por la F (situada 5 lugares a la derecha de la A), la B por la G, y así sucesivamente.

Este método se utiliza desde la antigüedad y debe su nombre a Julio César, quien lo usaba para comunicarse con sus generales y así evitar interceptar los mensajes. Para decodificar el mensaje se usa el desplazamiento con el que el mensaje se cifra.

El decodificador César muchas veces puede formar parte de sistemas más complejos de codificación. Como el cifrado Vigenère, e incluso tiene aplicación en el sistema ROT13. Como todos los cifrados de sustitución alfabética simple, el decodificador César se descifra con facilidad y no ofrece mucha seguridad e integridad en la comunicación.

Historia y uso del decodificador César

No se sabe qué tan efectivo era realmente el decodificador César en esa época. Pero debió ser razonablemente seguro, porque pocos enemigos de César habrían sabido leer, y mucho menos descifrar los mensajes. Asumiendo que el atacante pudiera leer el mensaje, no existen pruebas de la existencia de técnicas para solucionar este tipo de codificación.​

En el siglo XIX, la sección de avisos personales de los periódicos servía a veces para intercambiar mensajes codificados usando técnicas de cifrado simples. David Kahn describe algunos ejemplos de comunicación secreta entre amantes que utilizaban este cifrado en el periódico The Times​. Incluso en 1915, el decodificador César aún era utilizado por la armada rusa. Lo empleaba sustituyendo a otros cifrados más complicados que habían resultado muy difíciles de utilizar por sus tropas. Los criptoanalistas alemanes y austriacos no tuvieron mucha dificultad para decodificar los mensajes.​

El decodificador César se puede encontrar en la actualidad en algunos juguetes modernos, como los anillos decodificadores. En el algoritmo ROT13 se usa el cifrado César con un desplazamiento de 13. Un método simple para ocultar el texto que se usa en algunos foros de Internet para ocultar texto. Pero no se usa como método de codificación.

Implementación del decodificador

Te has de haber dado cuenta de que todo lo anterior era pura teoría. Ahora, pasemos a la codificación de nuestro sistema para descifrar mensajes cifrados con el método de César.

El sistema se implementó usando el Hypertext Preprocessor (PHP)

El index

El archivo index.html es la interfaz mediante la cual recibimos el mensaje cifrado. Copia el siguiente código y guárdalo en un archivo llamado index.html.

<!doctype html>
<html lang="es">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>Decodificador de César</title>

    <link rel="canonical" href="https://getbootstrap.com/docs/4.3/examples/sign-in/">

    <!-- Bootstrap core CSS -->
<link href="https://getbootstrap.com/docs/4.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">


    <style>
      .bd-placeholder-img {
        font-size: 1.125rem;
        text-anchor: middle;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
      }

      @media (min-width: 768px) {
        .bd-placeholder-img-lg {
          font-size: 3.5rem;
        }
      }
    </style>
    <!-- Custom styles for this template -->
    <link href="https://getbootstrap.com/docs/4.3/examples/sign-in/signin.css" rel="stylesheet">
  </head>
  <body class="text-center">
    <form class="form-signin" action="codificador.php" method="post" name="login" onSubmit="return valider_données()">
  <img class="mb-4" src="cesar.jpg" alt="" width="100" height="100">
  <h1 class="h3 mb-3 font-weight-normal">Decodificador de Julio César</h1>
  <label for="inputPassword" class="sr-only">Mensaje a decodificar</label>
  <input type="text" id="inputPassword" class="form-control" placeholder="Ingresa el mensaje a decodificar" name="mensaje" required>
  <button class="btn btn-lg btn-primary btn-block" type="submit">Decodificar</button>
  <p class="mt-5 mb-3 text-muted">&copy; <a href="https://saintuszephir.com" target="_blank">Saintus Zephir</a>, todos los derechos reservados.</p>
</form>
<script type="text/javascript" src="valider.js"></script>
</body>
</html>

Recuerda que puedes diseñar esta interfaz a tu gusto. El archivo más importante es donde se procesa el mensaje ingresado por el usuario, el cual veremos a continuación.

El decodificador

EL archivo decodificador es donde se procesa el mensaje y calcular las diferentes salidas para cada valor de desplazamiento. Guárdalo con el mismo nombre de action en el index.html.


<?php
$mensaje=$_POST['mensaje']; 
$mensaje=strtolower($mensaje);  #Convierte todas las letras en minúsculas

     #Aquí empieza la función Codificador del decodificador
     function Codificador($mensaje, $x){
        $cifrado=$mensaje;             #Se crea una cadena donde se pondrá el mensaje codificado
        for($i=0;$i<strlen($mensaje);$i++){
            if(ord($mensaje[$i])>96&&ord($mensaje[$i])<123){
                if(ord($mensaje[$i])<(123-$x)){
                    $cifrado[$i]=chr(ord($mensaje[$i])+$x);
                }
                else{
                    $cifrado[$i]=chr(ord($mensaje[$i])+$x-123+97);
                }
            }
        }
        return $cifrado;
     }

     #Aqui está la función Check, que revisa si un string existe detro de las palabras más comunes del idioma inglés

    function Check($palabra){
        $archivo = fopen("english.txt", "r") #Se abre al archivo english.txt con permiso de lectura que es donde están las palabras más usadas del inglés.
        or die("Problemas para abrir archivo.txt");
        $bandera=0;

        while(!feof($archivo)){
            $traer=fgets($archivo);
            $stract=substr($traer,0,-2);
            if(strcmp($stract, $palabra)==0){
                $bandera=1;
                break;
            }
        }
        fclose($archivo);
        return $bandera;
     }

    #La función Descomponer, separa cada palabra del mensaje oculto  e invoca a check para revisar si existe
    function Descomopner($mensaje){
        $palabrota="PNEUMONOULTRAMICROSCOPICSILICOVOLCANO";                 #Esta es la palabra más larga en inglés
        $NWord=0;
        $NL=0;
        for($i=0;$i<strlen($mensaje);$i++){
            if(ord($mensaje[$i])>96&&ord($mensaje[$i])<123){
                $palabrota[$NL]=$mensaje[$i];
                $NL++;
            }
            else{
                $palabra=substr($palabrota, 0,$NL);
                $NL=0;
                $NWord=$NWord+Check($palabra);
            }
        }
        return $NWord;
     }


     #Aqui empieza el llamado de funciones
 
                            

     $Codificaciones=array(25); #Se crea un arreglo donde  se guardará todos los string codificados
     for($i=0; $i<26; $i++){   #Se codifica el mensaje con todos los módulos posibles                     
        $Codificaciones[$i]=Codificador($mensaje,$i);
     }

     #Aquí se descompone todos los posibles mensajes y se los califica para identifar el mensaje más probable
    $ranking=array(25);
    $top=0;

    for($j=0;$j<26;$j++){
        $ranking[$j]=Descomopner($Codificaciones[$j]);
        if($ranking[$j]>$ranking[$top]) $top=$j;
    }
?>

<!DOCTYPE html>
<html lang="es">
<head>
    <title>Resultados del cifrador</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="font-awesome.min.css">
    <link rel="stylesheet" type="text/css" href="animate.css">
    <link rel="stylesheet" type="text/css" href="select2.min.css">
    <link rel="stylesheet" type="text/css" href="perfect-scrollbar.css">
    <link rel="stylesheet" type="text/css" href="util.css">
    <link rel="stylesheet" type="text/css" href="main.css">
</head>
<body>

   <div class="limiter">
        <div class="container-table100">
            <div class="wrap-table100">
                <div class="table100 ver1 m-b-110">
                    <div class="table100-head">
                        <table>
                            <thead>
                                <tr class="row100 head">
                                    <th class="cell100 column1" align="center">Mensaje original</th>
                                </tr>
                            </thead>
                        </table>
                    </div>

                    <div class="table100-body js-pscroll">
                        <table>
                            <tbody>

            <tr class="row100 body">
                <td class="cell100 column1"><?php echo $mensaje;?></td>
            </tr>
                    </tbody>
                        </table>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <div class="limiter">
        <div class="container-table100">
            <div class="wrap-table100">
                <div class="table100 ver1 m-b-110">
                    <div class="table100-head">
                        <table>
                            <thead>
                                <tr class="row100 head">
                                    <th class="cell100 column1" align="center">Mejor mensaje descifrado</th>
                                    <th class="cell100 column2" align="center">Valor de K</th>
                                </tr>
                            </thead>
                        </table>
                    </div>

                    <div class="table100-body js-pscroll">
                        <table>
                            <tbody>

            <tr class="row100 body">
                <td class="cell100 column1"><?php echo $Codificaciones[$top];?></td>
                <td class="cell100 column2"><?php echo $top;?></td>
            </tr>
                    </tbody>
                        </table>
                    </div>
                </div>
            </div>
        </div>
    </div>

<div class="limiter">
        <div class="container-table100">
            <div class="wrap-table100">
                <div class="table100 ver1 m-b-110">
                    <div class="table100-head">
                        <table>
                            <thead>
                                <tr class="row100 head">
                                    <th class="cell100 column2" align="center">Valor de K</th>
                                    <th class="cell100 column3" align="center">Calificación</th>
                                    <th class="cell100 column1" align="center">Mensaje descifrado</th>
                                </tr>
                            </thead>
                        </table>
                    </div>

                    <div class="table100-body js-pscroll">
                        <table>
                            <tbody>

 <tr class="row100 body">
    <td class="cell100 column2"><?php for ($j=0; $j<26; $j++) { 
                    echo $j;   echo "<br>";  }               
    ?></td>
    <td class="cell100 column3"><?php for ($j=0; $j<26; $j++) { 
                    echo $ranking[$j]; echo "<br>";  }               
    ?></td>
    <td class="cell100 column1"  style="white-space: nowrap"><?php for ($j=0; $j<26; $j++) { 
                       $men= $Codificaciones[$j];
                       echo $men; echo "<br>";
        }
            ?></td>
            </tr>  

                    </tbody>
                        </table>
                    </div>
                </div>
            </div>
        </div>
    </div>

     </table>

 <table width="20" border="0" align="center" cellspacing="1" cellpadding="1" style="padding: 5px">
                <tr class="row100 body" align="center">
                    <td class="cell100 column4" align="center"> 
                        <a class="boton_personalizado" href="index.html" style="color: blue; text-decoration: none; ">Finalizar</a>
                    </td>
                </tr>
            </table>
 
<script src="jquery-3.2.1.min.js"></script>
<script src="popper.js"></script>
<script src="bootstrap.min.js"></script>
<script src="select2.min.js"></script>
    <script src="perfect-scrollbar.min.js"></script>
    <script src="main.js"></script>

</body>
</html

Igual puedes personalizar la salida de los resultados a tu gusto. El decodificador está en inglés, si lo quieres en otro idioma sustituye el diccionario por el idioma que quieres.

Probar o descargar el decodificador César

Puedes checar el funcionamiento del sistema en este enlace.

Descarga el código completo en este enlace.

¡No olvides mostrar tu apoyo dejando un “Me gusta”!

Acerca del autor

Saintus Zephir

Ingeniero en Sistemas Computacionales y estudiante de Maestría en Ciencias en Ingeniería y Tecnologías Computacionales en el Centro de Investigación y de Estudios Avanzados del IPN (CINVESTAV-IPN).

Comparte el artículo en tus redes sociales

Artículos relacionados

7 comentarios

  1. Caitlin

    Howdy, I believe your site may be having internet browser compatibility problems.
    When I take a look at your site in Safari, it looks
    fine but when opening in Internet Explorer, it’s
    got some overlapping issues. I just wanted to give you a quick heads up!
    Aside from that, wonderful blog!

  2. Carmen

    My brother suggested I might like this web site. He was once entirely right.
    This put up actually made my day. You can not consider just how a lot time I had spent for this information! Thanks!

  3. Michell

    Good post. I learn something new and challenging on websites I stumbleupon every day.
    It’s always interesting to read articles from other authors
    and use a little something from their web sites.

  4. Richelle

    Definitely believe that which you said. Your favorite justification seemed to be on the net the easiest thing to be aware of.
    I say to you, I definitely get irked while people think about worries that they just do not know about.
    You managed to hit the nail upon the top and also defined out the whole thing without having side effect
    , people could take a signal. Will likely be back to get more.

    Thanks

  5. Trey

    Thank you for the good writeup. It in fact was a amusement account it.

    Look advanced to far added agreeable from you! By the way,
    how can we communicate?

  6. Octavia

    I’m amazed, I must say. Seldom do I encounter a blog that’s
    both equally educative and amusing, and let me tell you, you have hit the nail on the head.

    The problem is something that not enough men and women are speaking intelligently
    about. I am very happy that I found this during my
    hunt for something concerning this.

  7. Inge

    Hey! Do you know if they make any plugins to protect against hackers?
    I’m kinda paranoid about losing everything I’ve worked hard on.
    Any recommendations?

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

× ¿Cómo puedo ayudarte?