Cifrado_Cesar_Python

Tutorial: cifrado César en Python

Para aquellos que no lo sepan, el cifrado «César» es un método muy sencillo que consiste en ir sustituyendo cada letra del mensaje a cifrar, por otra que se encuentra a un número fijo de posiciones en el alfabeto original. Se trata de una técnica que debe su nombre al emperador romano Julio César, a quién se atribuye la creación de este método. A continuación muestro un sencillo ejemplo en el que cifraremos la palabra «CASA» empleando un valor de desplazamiento de 2:

Cifrado_Cesar_Python

Pues bien, en el presente artículo, vamos a hacer un sencillo programa para cifrar mediante tal método, un texto introducido por nosotros. Para ello como es natural, lo primero que haremos será pedir (mediante el correspondiente «input») el texto que queremos traducir, que almacenaremos en la variable «texto»:

A continuación, procederemos a crear la cadena de caracteres alfabéticos. Como queremos que nuestro programa funcione tanto para mayúsculas como para minúsculas, haremos que la variable «abc» (que es la que contendrá al alfabeto a emplear) contenga las letras en mayúsculas o minúsculas, en función de la naturaleza (mayúscula o minúscula) del texto introducido:

Por su parte, vamos a crear nuestro programa de modo que podamos escoger el valor de desplazamiento dentro del alfabeto (lo que determinará la correspondencia entre caracteres). Para ello emplearemos otro «input», en formato entero («int») en el que vamos a pedir dicho valor. Tras ello, crearemos la cadena «cifrad» (que es la que destinaremos a albergar el texto cifrado final):

Bootcamp web

Con esto ya tenemos los datos de partida. El paso siguiente es crear el sencillo algoritmo en el que una variable (a la que llamaremos «c») irá representando a cada uno de los caracteres de la cadena «texto» (el texto a cifrar):

Así, para cada valor de «c» (cada letra de «texto») lo primero que comprobará el programa es si tal carácter se encuentra en la cadena «abc». En el caso de que así sea, a la cadena «cifrad» se le añadirá el carácter ubicado en la posición correspondiente dentro de «abc». La cual, a su vez, se corresponderá con el resto resultante de la división de la nueva posición correspondiente (es decir la posición del valor actual de «c» mas el valor de desplazamiento «k») y la longitud de la cadena «abc» (la cual obtenemos con la función «len», aunque podríamos haber puesto directamente «27» que es el número de caracteres de la cadena «abc»).

La razón del empleo de esta operación está en evitar los errores «out of range» que podrían producirse en determinados casos (por ejemplo si tenemos que sustituir una «x» usando un valor de desplazamiento de 3). Esto, como ya apuntamos, es para el caso de que el valor de «c» se encuentre, efectivamente en «abc». No obstante puesto que queremos que todos los caracteres introducidos se vean de algún modo, representados en el texto final, diremos que si el valor actual de «c» no está en «abc», dicho carácter se añada (sin sustitución) a la cadena «cifrad» sin más.

Hecho todo esto, tan solo nos queda visualizar el texto resultante, mediante «print»:

Para comprobar que nuestro programa hace, en efecto lo que queremos, ejecutaremos el código 3 veces, introduciendo un texto en mayúsculas, otro en minúsculas y otro en el que hemos empleado dos caracteres («¿» y «?») no incluido en «abc», aparte de los espacios en blanco para comprobar cómo se comporta nuestro programa en cada uno de tales casos:

Cifrado_Cesar_Python

Podemos ver cómo, efectivamente, en los 3 casos el programa ha procedido a cifrar con éxito el texto introducido por nosotros.

*También disponible el código completo del programa en este repositorio de GitHub

Antonio Alfonso Martínez

Antonio Alfonso Martínez

Programador y desarrollador autodidacta. Semanalmente publica en el blog «El programador Chapuzas« (wordpress) y también colaboro en las páginas «Código Comentado» y «Algoritmos MathPy» de Facebook.

Si tienes algo que deseas compartir o quieres formar parte de JustCodeIt, escríbenos a [email protected].



Share this:

Leave a comment