Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Last active December 10, 2018 18:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parzibyte/97c2ecad28cc8a5e591752ca21fa6af1 to your computer and use it in GitHub Desktop.
Save parzibyte/97c2ecad28cc8a5e591752ca21fa6af1 to your computer and use it in GitHub Desktop.
CifradoCésar created by parzibyte - https://repl.it/@parzibyte/CifradoCesar
"""
Implementación del cifrado César en Python,
respetando espacios y otros caracteres como la ñ
@author parzibyte
"""
def codificar(mensaje, rotaciones):
#Nota: también se puede importar a string y usar ascii_letters y ascii_uppercase
alfabeto = "abcdefghijklmnopqrstuvwxyz"
alfabeto_mayusculas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
longitud_alfabeto = len(alfabeto)
codificado = ""
for letra in mensaje:
if not letra.isalpha() or letra.lower() == 'ñ':
codificado += letra
continue
valor_letra = ord(letra)
# Suponemos que es minúscula, así que esto comienza en 97(a) y se usará el alfabeto en minúsculas
alfabeto_a_usar = alfabeto
limite = 97 # Pero si es mayúscula, comienza en 65(A) y se usa en mayúsculas
if letra.isupper():
limite = 65
alfabeto_a_usar = alfabeto_mayusculas
# Rotamos la letra
posicion = (valor_letra - limite + rotaciones) % longitud_alfabeto
# Convertimos el entero resultante a letra y lo concatenamos
codificado += alfabeto_a_usar[posicion]
return codificado
def decodificar(mensaje, rotaciones):
#Nota: también se puede importar a string y usar ascii_letters y ascii_uppercase
alfabeto = "abcdefghijklmnopqrstuvwxyz"
alfabeto_mayusculas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
longitud_alfabeto = len(alfabeto)
decodificado = ""
for letra in mensaje:
if not letra.isalpha() or letra.lower() == 'ñ':
decodificado += letra
continue
valor_letra = ord(letra)
# Suponemos que es minúscula, así que esto comienza en 97(a) y se usará el alfabeto en minúsculas
alfabeto_a_usar = alfabeto
limite = 97 # Pero si es mayúscula, comienza en 65(A) y se usa en mayúsculas
if letra.isupper():
limite = 65
alfabeto_a_usar = alfabeto_mayusculas
# Rotamos la letra, ahora hacia la izquierda
posicion = (valor_letra - limite - rotaciones) % longitud_alfabeto
# Convertimos el entero resultante a letra y lo concatenamos
decodificado += alfabeto_a_usar[posicion]
return decodificado
# Ejemplo de uso
mensaje = "Visita parzibyte.me"
print("El mensaje original es: ", mensaje)
#Nota: el mismo número de rotaciones debe usarse tanto para codificar y decodificar
rotaciones = 1
codificado = codificar(mensaje, rotaciones)
print("Codificado es: ", codificado)
decodificado = decodificar(codificado, rotaciones)
print("Decodificado es: ", decodificado)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment