Ir al contenido
r4kso r4kso

Técnicas de Cifrado I - Cifrado César

·867 palabras·5 mins

El cifrado César es uno de los métodos más antiguos y sencillos de cifrado, y se utiliza para proteger información mediante la sustitución de cada letra del mensaje original por otra letra que se encuentra un número fijo de posiciones más adelante en el alfabeto. En este artículo, veremos cómo funciona el cifrado César y cómo se puede implementar en la práctica.

Cómo funciona el cifrado César>

Cómo funciona el cifrado César #

La idea detrás del cifrado César es muy simple: cada letra del mensaje original se reemplaza por otra letra que se encuentra un número fijo de posiciones más adelante en el alfabeto. Por ejemplo, si se utiliza un desplazamiento de tres, la letra A se reemplazaría por la letra D, la letra B se reemplazaría por la letra E, y así sucesivamente. El nombre del cifrado se debe a Julio César, quien utilizó esta técnica para cifrar sus mensajes.

El cifrado César es muy fácil de implementar en la práctica. El primer paso es elegir el número de posiciones que se utilizará para desplazar cada letra. Este número se conoce como la “clave” del cifrado. Por ejemplo, si se utiliza un desplazamiento de tres, la clave sería 3.

A continuación, se toma el mensaje original y se reemplaza cada letra por otra letra que se encuentra un número fijo de posiciones más adelante en el alfabeto. Para hacer esto, se puede utilizar una tabla de sustitución, que muestra qué letra debe ser reemplazada por cada letra del alfabeto. Por ejemplo, si se utiliza un desplazamiento de tres, la tabla de sustitución sería la siguiente:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

Con esta tabla de sustitución, el mensaje “HOLA MUNDO” se cifraría como “KROD PXQGR”. Para descifrar el mensaje, simplemente se aplica el mismo desplazamiento en sentido contrario, es decir, se sustituye cada letra cifrada por la letra que se encuentra tres posiciones antes en el alfabeto.

Implementamos el cifrado César en Python>

Implementamos el cifrado César en Python #

Una vez entendido el funcionamiento del cifrado, con un poco de conocimiento de Python es sencillo programarlo. En ésta sección crearemos un método de cifrado cesar_encryption que recibirá por parámetros text y shift, siendo estos el texto a cifrar y el número de desplazamiento respectivamente.

Bien, veremos que el código es bastante corto. Primero crearemos la función, la cual devolverá el texto cifrado (ciphertext):

def cesar_encryption(text, shift):
    ciphertext = ""

    return ciphertext

Ahora siguiendo la lógica del cifrado César, deberemos crear un bucle que recorra cada caracter del texto pasado por parámetro y modifique su valor en función del número de desplazamiento que se haya proporcionado. Dado que carecemos de un abecedario sobre el que rotar los valores, crearemos el nuestro propio (en inglés) para no estar importando librerías:

ABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

El código final, con el bucle sería el siguiente:

ABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

def cesar_encryption(text, shift):
    ciphertext = ""

    for c in text:
        ciphertext += ABC[(ABC.index(c) + shift) % len(ABC)]

    return ciphertext

Esa “operación rara” en el acceso a ABC sirve para reiniciar el índice una vez supera la longitud del abecedario. Es decir, si fuese Z + 1 = A. Si no lo hacemos, nos dará un error de index out of bounds.

Ahora vamos a probarlo, pero hay que tener en cuenta las restricciones: puesto que el abecedario es en inglés, no podremos colocar la “ñ”, así como usar espacios o letra en minúscula. En resumen, solo podremos usar los caracteres mostrados en ABC. Se ha hecho así a modo de muestra, pero no es excesivamente más complicado implementarlo a nivel ASCII (por ejemplo). Dicho esto, vamos a probar con la frase “ELMEJORBLOG” y con un shift de 4:

Vemos que el resultado es: IPQINSVFPSK. Probaremos luego con el desencriptado a ver si obtenemos el valor original.

Implementamos el descifrado César en Python>

Implementamos el descifrado César en Python #

No posee una mayor complejidad que la función anterior, debemos repetir los pasos a la inversa:

ABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def cesar_decryption(ciphertext, shift):
    originaltext = ""

    for c in ciphertext:
        originaltext += ABC[(ABC.index(c) - shift) % len(ABC)]

    return originaltext

Como vemos la función es la inversa, se resta el deplazamiento (shift). Ahora usando ésta función con el resultado proporcionado por la anterior función y el mismo desplazamiento nos da la palabra original:

Conclusión>

Conclusión #

El cifrado César tiene algunas limitaciones importantes. Es muy fácil de romper mediante el uso de técnicas de análisis de frecuencia debido a que la frecuencia de las letras en el mensaje cifrado sigue siendo la misma que en el mensaje original. A pesar de estas limitaciones, el cifrado César sigue siendo una técnica útil y divertida para aprender sobre la criptografía. También puede ser utilizado como una capa adicional de seguridad en combinación con otros métodos de cifrado más fuertes y complejos.

Si te ha parecido útil, agradecería que guardaras la página en marcadores (Ctrl+D) y/o me sigas en Twitter :)