Il codice Morse è un metodo per trasmettere informazioni di testo come una serie di toni, luci o clic on-off che possono essere compresi direttamente da un ascoltatore o osservatore esperto senza apparecchiature speciali. Prende il nome da Samuel F. B. Morse, inventore del telegrafo.
Algoritmo
L'algoritmo è molto semplice. Ogni carattere nella lingua inglese è sostituito da una serie di “punti” e “trattini” o talvolta solo dal singolare “punto” o “trattino” e viceversa.
Si prega di fare riferimento a questa Wikipedia Immagine per dettagli.
Crittografia
- Nel caso della crittografia, estraiamo ogni carattere (se non lo spazio) da una parola uno alla volta e lo abbiniamo al codice morse corrispondente memorizzato in qualunque struttura dati abbiamo scelto (se stai codificando in Python, i dizionari possono risultare essere molto utile in questo caso)
- Memorizziamo il codice morse in una variabile che conterrà la nostra stringa codificata e poi aggiungiamo uno spazio alla nostra stringa che conterrà il risultato.
- Durante la codifica in codice morse dobbiamo aggiungere 1 spazio tra ogni carattere e 2 spazi consecutivi tra ogni parola.
- Se il carattere è uno spazio, aggiungi un altro spazio alla variabile contenente il risultato. Ripetiamo questo processo finché non attraversiamo l'intera stringa
Decifrazione
- Nel caso della decrittazione, iniziamo aggiungendo uno spazio alla fine della stringa da decodificare (questo verrà spiegato più avanti).
- Ora continuiamo a estrarre i caratteri dalla stringa finché non otteniamo più spazio.
- Non appena otteniamo uno spazio cerchiamo il carattere della lingua inglese corrispondente alla sequenza di caratteri estratta (o al nostro codice morse) e lo aggiungiamo a una variabile che memorizzerà il risultato.
- Ricorda che tenere traccia dello spazio è la parte più importante di questo processo di decrittazione. Non appena avremo 2 spazi consecutivi aggiungeremo un altro spazio alla nostra variabile contenente la stringa decodificata.
- L'ultimo spazio alla fine della stringa ci aiuterà a identificare l'ultima sequenza di caratteri del codice morse (poiché lo spazio funge da controllo per estrarre i caratteri e iniziare a decodificarli).
Implementazione:
Python fornisce una struttura dati chiamata dizionario che memorizza le informazioni sotto forma di coppie chiave-valore, molto comoda per implementare una cifratura come un codice morse. Possiamo salvare la tabella del codice morse in un dizionario dove (coppie chiave-valore) => (Caratteri inglesi-Codice Morse) . Il testo in chiaro (caratteri inglesi) prende il posto delle chiavi e il testo cifrato (codice Morse) forma i valori delle chiavi corrispondenti. È possibile accedere ai valori delle chiavi dal dizionario nello stesso modo in cui accediamo ai valori di un array tramite il loro indice e viceversa.
Python3
leggere i file json
# Python program to implement Morse Code Translator> '''> VARIABLE KEY> 'cipher' ->'memorizza la forma tradotta in morse della stringa inglese'> 'decipher' ->'memorizza la forma tradotta in inglese della stringa morse'> 'citext' ->'memorizza il codice morse di un singolo carattere'> 'i' ->'tiene il conto degli spazi tra i caratteri morse'> 'message' ->'memorizza la stringa da codificare o decodificare'> '''> # Dictionary representing the morse code chart> MORSE_CODE_DICT>=> {>'A'>:>'.-'>,>'B'>:>'-...'>,> >'C'>:>'-.-.'>,>'D'>:>'-..'>,>'E'>:>'.'>,> >'F'>:>'..-.'>,>'G'>:>'--.'>,>'H'>:>'....'>,> >'I'>:>'..'>,>'J'>:>'.---'>,>'K'>:>'-.-'>,> >'L'>:>'.-..'>,>'M'>:>'--'>,>'N'>:>'-.'>,> >'O'>:>'---'>,>'P'>:>'.--.'>,>'Q'>:>'--.-'>,> >'R'>:>'.-.'>,>'S'>:>'...'>,>'T'>:>'-'>,> >'U'>:>'..-'>,>'V'>:>'...-'>,>'W'>:>'.--'>,> >'X'>:>'-..-'>,>'Y'>:>'-.--'>,>'Z'>:>'--..'>,> >'1'>:>'.----'>,>'2'>:>'..---'>,>'3'>:>'...--'>,> >'4'>:>'....-'>,>'5'>:>'.....'>,>'6'>:>'-....'>,> >'7'>:>'--...'>,>'8'>:>'---..'>,>'9'>:>'----.'>,> >'0'>:>'-----'>,>', '>:>'--..--'>,>'.'>:>'.-.-.-'>,> >'?'>:>'..--..'>,>'/'>:>'-..-.'>,>'-'>:>'-....-'>,> >'('>:>'-.--.'>,>')'>:>'-.--.-'>}> # Function to encrypt the string> # according to the morse code chart> def> encrypt(message):> >cipher>=> ''> >for> letter>in> message:> >if> letter !>=> ' '>:> ># Looks up the dictionary and adds the> ># corresponding morse code> ># along with a space to separate> ># morse codes for different characters> >cipher>+>=> MORSE_CODE_DICT[letter]>+> ' '> >else>:> ># 1 space indicates different characters> ># and 2 indicates different words> >cipher>+>=> ' '> >return> cipher> # Function to decrypt the string> # from morse to english> def> decrypt(message):> ># extra space added at the end to access the> ># last morse code> >message>+>=> ' '> >decipher>=> ''> >citext>=> ''> >for> letter>in> message:> ># checks for space> >if> (letter !>=> ' '>):> ># counter to keep track of space> >i>=> 0> ># storing morse code of a single character> >citext>+>=> letter> ># in case of space> >else>:> ># if i = 1 that indicates a new character> >i>+>=> 1> ># if i = 2 that indicates a new word> >if> i>=>=> 2> :> ># adding space to separate words> >decipher>+>=> ' '> >else>:> ># accessing the keys using their values (reverse of encryption)> >decipher>+>=> list>(MORSE_CODE_DICT.keys())[>list>(MORSE_CODE_DICT> >.values()).index(citext)]> >citext>=> ''> >return> decipher> # Hard-coded driver function to run the program> def> main():> >message>=> 'GEEKS-FOR-GEEKS'> >result>=> encrypt(message.upper())> >print> (result)> >message>=> '--. . . -.- ... -....- ..-. --- .-. -....- --. . . -.- ... '> >result>=> decrypt(message)> >print> (result)> # Executes the main function> if> __name__>=>=> '__main__'>:> >main()> |
>
>
macchina virtuale Java
Produzione:
--. . . -.- ... -....- ..-. --- .-. -....- --. . . -.- ... GEEKS-FOR-GEEKS>