Cifrado César, Cifrado César con Python

Cifrado César con Python

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, Cifrado César con Python

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

Cifrado César, Cifrado César con Python

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.

Cifrado César, Cifrado César con Python

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

Cifrado César, Cifrado César con Python

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ó…

Cifrado César, Cifrado César con Python

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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *