Ejemplo 1: El cifrado César

El primer problema que queremos mostrarte se llama Cifrado César, más detalles aquí.

Este cifrado fue (probablemente) inventado y utilizado por Cayo Julio César y sus tropas durante las Guerras Galas. La idea es bastante simple: cada letra del mensaje se reemplaza por su consecuente más cercano (A se convierte en B, B se convierte en C, y así sucesivamente). La única excepción es la Z, la cual se convierte en A.

Partimos de las siguientes condiciones:

  • Solo acepta letras latinas (nota: los Romanos no usaban espacios en blanco ni dígitos).
  • Todas las letras del mensaje están en mayúsculas (nota: los Romanos solo conocían las mayúsculas).
# Cifrado César.
texto = input("Ingresa tu mensaje: ")
cifrado = ''
for caracter in texto:
    if not caracter.isalpha():
        continue
    caracter = caracter.upper()
    code = ord(caracter) + 1
    if code > ord('Z'):
        code = ord('A')
    cifrado += chr(code)

print(cifrado)

Veamos el código:

  • Pide al usuario que ingrese un mensaje (sin cifrar) de una línea.
  • Prepara una cadena para el mensaje cifrado (esta vacía por ahora).
  • Inicia la iteración a través del mensaje.
  • Si el carácter actual no es alfabético…
  • …ignoralo.
  • Convierte la letra a mayúsculas.
  • Obtén el código de la letra e increméntalo en uno.
  • Si el código resultante ha “dejado” el alfabeto latino (si es mayor que el código de la Z)…
  • … cámbialo al código de la A.
  • Agrega el carácter recibido al final del mensaje cifrado.
  • Imprime el cifrado.

El código, con este mensaje: AVE CAESAR Da como salida: BWFDBFTBS

Descifrando el mensaje

Ahora realizamos un programa para hacer la operación contraria: descifrar un mensaje:

# Cifrado César - descifrar un mensaje.
cifrado = input('Ingresa tu criptograma: ')
texto = ''
for caracter in cifrado:
    if not caracter.isalpha():
        continue
    caracter = caracter.upper()
    code = ord(caracter) - 1
    if code < ord('A'):
        code = ord('Z')
    texto += chr(code)

print(texto)