Cifrado César es en criptografía uno de los métodos más simples y más usados en el mundo. La criptografía es una ciencia que se encarga de estudiar las técnicas de alteración lingüística (cifrado y descifrado) para evitar que receptores no autorizados lean su contenido.

Cifrado César
El cifrado César, también conocido como desplazamiento César o código César, es un cifrado de sustitución. Esto quiere decir que cada letra de un texto es reemplazada por otra letra n cantidad de espacios hacia adelante en el alfabeto.
Tiene el nombre en honor a Julio César, ya que él usaba este método para comunicarse con sus generales. Imagina que César quería enviar una señal de ataque a su ejercito:

Usando el desplazamiento de 6 caracteres obtendríamos un mensaje completamente incomprensible. El mensaje cifrado se consigue desplazado una letra en el abecedario una cierta cantidad de veces, en la imagen anterior fueron 6 lugares en el abecedario.

Cuando una letra termina llega al final del abecedario el conteo de lugares continua desde el principio: ABCDE….

Descifrado del mensaje
Para el descifrado el método es el mismo pero recorriendo los espacios hacia la izquierda. En dado caso de que no se conozca el número de espacios con el cual se cifró el mensaje, un ataque de fuerza bruta puede conseguirlo fácilmente, ya que sólo hay 27 valores de desplazamiento.
Esto hace el que cifrado César no sea tan seguro, si hacemos una tabla con los valores de desplazamiento con su debido resultado será fácil para nosotros detectar cuando el mensaje ya se reveló…

Aplicación en Python
Cifrado César
Python nos permite hacer un cifrado César de una forma muy simple, comenzaremos con declarar las variables correspondientes, por simplicidad usaremos todos los caracteres en mayúsculas.
# Obtenemos mensaje a cifrar desde el usuario
# llamamos a upper para obtener sólo mayúsculas
texto = input("Mensaje > ").upper()
# Pedimos al usuario la cantidad de desplazamiento
n = int(input("Desplazamiento > "))
# Abecedario a utilizar en el cifrado
abc = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"
# Variable para guardar mensaje cifrado
cifrado = ""
Ya con todos los valores declarados a hora podemos comenzar el cifrado….
# Iteramos por cara letra del mensaje
for l in texto:
# Si la letra está en el abecedario se reemplaza
if l in abc:
pos_letra = abc.index(l)
# Sumamos para movernos a la derecha del abc
nueva_pos = (pos_letra + n) % len(abc)
cifrado+= abc[nueva_pos]
else:
# Si no está en el abecedario sólo añadelo
cifrado+= l
print("Mensaje cifrado:", cifrado)
Descifrado
Así de sencillo es crear un cifrado César con Python, ahora haremos el descifrado por fuerza bruta de un mensaje, es muy similar al anterior con la diferencia de que guardaremos en una lista los posibles mensajes añadiendo un ciclo for que reemplace la variable n.
# Obtenemos mensaje a descifrar desde el usuario
# llamamos a upper para obtener sólo mayúsculas
texto = input("Mensaje cifrado > ").upper()
# Abecedario a utilizar en el cifrado
abc = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"
# Iteramos por posibles valores de desplazamiento
for i in range(28):
# Guardar posible mensaje
descifrado = ""
for l in texto:
# Si la letra está en el abecedario reemplazamos
if l in abc:
pos_letra = abc.index(l)
# Restamos para movernos a la izquierda
nueva_pos = (pos_letra - i) % len(abc)
descifrado += abc[nueva_pos]
else:
descifrado+= l
msj = (f"ROT-{i}:", descifrado)
print(msj)
Conclusión
Este tipo de cifrado puede ser un aliado para ocultar información, pero no información muy sensible, actualmente existen muchos métodos de cifrado más seguros que te pueden garantizar más protección.
Si te ha gustado no dudes en visitar mis otras publicaciones en mi blog.
Awesome post! Keep up the great work! 🙂
Amazing Web page, Continue the great job. Thank you so much!
Awesome write-up. I am a normal visitor of your blog and appreciate you taking the time to maintain the nice site. I will be a frequent visitor for a really long time.