Ciao a tutti,
per puro scopo didattico mi sono messo a programmare il cifrario di Cesare in Python, con un programma che cifra i messaggi e uno che li decifra. Dopo aver completato entrambi i programmi li ho provati, cifrando un messaggio e decifrandolo con la chiave corrispondente nel secondo programma, ma l’output che ne risulta è totalmente errato. Ho però eseguito più volte i passaggi a mano, e il risultato mi esce. Quale può essere il problema?
Output del cifratore:
Output del decifratore:
per puro scopo didattico mi sono messo a programmare il cifrario di Cesare in Python, con un programma che cifra i messaggi e uno che li decifra. Dopo aver completato entrambi i programmi li ho provati, cifrando un messaggio e decifrandolo con la chiave corrispondente nel secondo programma, ma l’output che ne risulta è totalmente errato. Ho però eseguito più volte i passaggi a mano, e il risultato mi esce. Quale può essere il problema?
Python:
from random import randint
class Caesar:
def __init__(self, message, key):
self.message = message
self.key = key
self.pos = 0
def get_char(self):
current_char = self.message[self.pos]
return current_char
def cipher_c(self):
char = self.get_char()
if ord(char) + self.key <= 126:
encr_char = chr(ord(char) - self.key)
else:
a = 126 - ord(char)
encr_char = chr(32 - a + self.key)
return encr_char
def assemble_message(self):
msg = ’’
for i in range(len(self.message)):
char = self.cipher_c()
msg += char
self.pos += 1
return msg
if __name__ == '__main__':
key = randint(1, 57)
print(‘Chiave:’, key)
while True:
message = input('Inserisci il messaggio da criptare: ')
if message == 'stop':
break
caesar = Caesar(message, key)
print(caesar.assemble_message())
Python:
class Caesar:
def __init__(self, key, message):
self.message = message
self.key = key
self.pos = 0
def get_char(self):
current_char = self.message[self.pos]
return current_char
def decipher_c(self):
char = self.get_char()
if ord(char) + self.key >= 33:
decr_char = chr(ord(char) + self.key)
else:
a = ord(char) - self.key
b = 32 - a
decr_char = chr(126 - b)
return decr_char
def assemble_message(self):
msg = ’’
for i in range(len(self.message)):
char = self.decipher_c()
msg += char
self.pos += 1
return msg
if __name__ == '__main__':
key = int(input('Chiave: '))
while True:
message = input('\nInserisci il messaggio da decriptare: ')
if message == 'stop':
break
caesar = Caesar(key, message)
print(caesar.assemble_message())
Output del cifratore:
Codice:
Chiave: 25 // chiave generata dal programma, la stampa per praticità
Inserisci il messaggio da criptare: Ciao
\$z*
Output del decifratore:
Codice:
Chiave: 25 // input richiesto dal programma per decifrare il messaggio
Inserisci il messaggio da decriptare: \$z*
u=(carattere non stampabile)C
Ultima modifica: