Last active
December 10, 2018 18:47
-
-
Save parzibyte/97c2ecad28cc8a5e591752ca21fa6af1 to your computer and use it in GitHub Desktop.
CifradoCésar created by parzibyte - https://repl.it/@parzibyte/CifradoCesar
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
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