-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcaesar-cipher.py
More file actions
104 lines (80 loc) · 3.61 KB
/
Copy pathcaesar-cipher.py
File metadata and controls
104 lines (80 loc) · 3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#Una función recibe parametros o variables para realizar una tarea
def suma (numero1, numero2):
#Guardamos el resultado del valor de la suma
resultado = numero1 + numero2
#devolvemos el valor
return resultado
#Creamos una variables con lo que diga el usuario
a = input("Escribe un número: ")
#Convertimos la variable a número
a = int(a)
#Creamos una variables con lo que diga el usuario
b = input("Escribe un número: ")
#Convertimos la variable a número
b = int(b)
print(suma(a, b))
#Laboratorio
# La idea es “mover” cada letra del mensaje un número de posiciones (la clave).
# Por ejemplo, si la clave es 3: A -> D, B -> E, C -> F, etc.
# Esta función recibe un alfabeto (un texto) y lo pega consigo mismo.
# Lo hacemos para poder “movernos” hacia adelante sin quedarnos sin letras.
# Ejemplo: "ABC" se vuelve "ABCABC".
def getDoubleAlphabet(alphabet):
doubleAlphabet = alphabet + alphabet
return doubleAlphabet
# Esta función le pide al usuario que escriba un mensaje.
# Lo que el usuario escriba se guarda y luego se devuelve.
def getMessage():
stringToEncrypt = input("Please enter a message to encrypt: ")
return stringToEncrypt
# Esta función le pide al usuario una clave.
# La clave es un número del 1 al 25 que indica cuánto se moverán las letras.
def getCipherKey():
shiftAmount = input("Please enter a key (whole number from 1-25): ")
return shiftAmount
# Esta función hace el trabajo de encriptar.
# Recorre el mensaje letra por letra, busca cada letra en el alfabeto,
# le suma la clave para “moverla”, y va armando el mensaje encriptado.
def runCaesarCipherProgram():
myAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
print(f'Alphabet: {myAlphabet}')
# Duplico el alfabeto para poder desplazar letras sin problemas
myAlphabet2 = getDoubleAlphabet(myAlphabet)
print(f'Alphabet2: {myAlphabet2}')
# Pido el mensaje al usuario
myMessage = getMessage()
print(myMessage)
# Pido la clave al usuario
myCipherKey = getCipherKey()
print(myCipherKey)
# Encripto el mensaje
myEncryptedMessage = encryptMessage(myMessage, myCipherKey, myAlphabet2)
print(f'Encrypted Message: {myEncryptedMessage}')
# Desencripto el mensaje (para comprobar que vuelve al original)
myDecryptedMessage = decryptMessage(myEncryptedMessage, myCipherKey, myAlphabet2)
print(f'Decypted Message: {myDecryptedMessage}')
# Función desencriptar
def encryptMessage(message, cipherKey, alphabet):
encryptedMessage = ""
uppercaseMessage = ""
uppercaseMessage = message.upper()
# Aquí reviso cada letra del mensaje (ya en mayúsculas)
for currentCharacter in uppercaseMessage:
# Busco en qué posición está la letra dentro del alfabeto
position = alphabet.find(currentCharacter)
# Calculo la nueva posición sumando la clave
newPosition = position + int(cipherKey)
# Si la letra sí está en el alfabeto, cambio por la letra “movida”
if currentCharacter in alphabet:
encryptedMessage = encryptedMessage + alphabet[newPosition]
else:
# Si no es letra (por ejemplo espacio, número o símbolo), la dejo igual
encryptedMessage = encryptedMessage + currentCharacter
# Al final devuelvo el texto encriptado completo
return encryptedMessage
def decryptMessage(message, cipherKey, alphabet):
decryptKey = -1 * int(cipherKey)
return encryptMessage(message, decryptKey, alphabet)
# Si no llamamos la función principal, no pasa nada.
# Esta línea es la que “arranca” el programa.
runCaesarCipherProgram()