Tutorial: cifrado César en Python

Autor: | Última modificación: 13 de febrero de 2024 | Tiempo de Lectura: 4 minutos
Temas en este post: ,

Para aquellos que no lo sepan, el cifrado «César» o cifrado césar en Python 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.

Cifrado César en Python

El cifrado césar en Python 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 César en Python

Pues bien, en el presente artículo, vamos a hacer un sencillo programa para cifrar mediante el método cifrado césar en Python, 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»:

#INTRODUCIMOS TEXTO A CIFRAR

texto=input ("tu texto:  ")

A continuación, procederemos a crear la cadena de caracteres alfabéticos o texto cifrado por el cifrado césar. Como queremos que nuestro programa funcione tanto para mayúsculas como para minúsculas con el cifrado césar en Python, haremos que la variable «abc» (que es la que contendrá al abecedario cifrado césar 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:

#INTRODUCIMOS TEXTO A CIFRAR

texto=input ("tu texto:  ")
#CREAMOS CADENA DE CARÁCTERES

if texto==texto.upper () : #PARA MAYUSCULAS

      abc="ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"

else:

      abc="abcdefghijklmnñopqrstuvwxyz" #PARA MINUSCULAS

Por su parte, para el cifrado césar 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» de cifrado (que es la que destinaremos a albergar el texto cifrado final):

#INTRODUCIMOS TEXTO A CIFRAR

texto=input ("tu texto:  ")
#CREAMOS CADENA DE CARÁCTERES

if texto==texto.upper () : #PARA MAYUSCULAS

      abc="ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"

else:

      abc="abcdefghijklmnñopqrstuvwxyz" #PARA MINUSCULAS

#DEFINIMOS VALOR DE DESPLAZAMIENTO
k=int (input ("Valor de desplazamiento: "))

#CREAMOS LA CADENA "cifrad".
cifrad=""

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):

#INTRODUCIMOS TEXTO A CIFRAR

texto=input ("tu texto:  ")
#CREAMOS CADENA DE CARÁCTERES

if texto==texto.upper () : #PARA MAYUSCULAS

      abc="ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"

else:

      abc="abcdefghijklmnñopqrstuvwxyz" #PARA MINUSCULAS

#DEFINIMOS VALOR DE DESPLAZAMIENTO
k=int (input ("Valor de desplazamiento: "))

#CREAMOS LA CADENA "cifrad".
cifrad=""

#REALIZAMOS CIFRADO.
for c in texto:
 if c in abc:
      cifrad += abc[(abc.index(c)+k%(1en(abc))]
 else:
     cifrad+=c

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 cifrado resultante, mediante «print»:

#INTRODUCIMOS TEXTO A CIFRAR y los codigos de encriptación

texto=input ("tu texto:  ")
#CREAMOS CADENA DE CARÁCTERES

if texto==texto.upper () : #PARA MAYUSCULAS

      abc="ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"

else:

      abc="abcdefghijklmnñopqrstuvwxyz" #PARA MINUSCULAS

#DEFINIMOS VALOR DE DESPLAZAMIENTO
k=int (input ("Valor de desplazamiento: "))

#CREAMOS LA CADENA "cifrad".
cifrad=""

#cifrado sagrado
#REALIZAMOS CIFRADO.
for c in texto:
 if c in abc:
      cifrad += abc[(abc.index(c)+k%(1en(abc))]
 else:
     cifrad+=c

#VISUALIZAMOS TEXTO FINAL.
print("texto cifrado: ",cifrad

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 con el cifrado césar. Tenemos nuestro texto cifrado.

*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 KeepCoding, escríbenos a [email protected].