Hemmelege kodar
Skrevet av: Omsett frå Code Club UK
Oversatt av: Stein Olav Romslo
Introduksjon
Legg bort skjelpaddene dine, i dag skal me lære korleis me kan sende hemmelege beskjedar!
Kodeklubb-koden
Eit chiffer er eit system for å gjere om vanleg tekst til kode som ikkje andre skal kunne lese. Me skal bruke eit av dei eldste og mest berømte chiffera, nemleg Cæsar-chifferet eller Cæsar si kode - oppattkalla etter Gaius Julius Cæsar som sannsynlegvis brukte det til å sende hemmelege beskjedar. Det er nok ikkje den beste måten å hindre andre i å lese beskjedane dine, men det kjem me tilbake til. Det finst ferdige modular til Python du kan bruke viss du vil lage ein kode som skal vere vanskeleg å knekke, men no skal me prøve å lage Cæsar-chifferet sjølv.
Start med å teikne alle bokstavane i ein sirkel.
Å A
Ø B
Æ C
Z D
Y E
X F
W G
V H
U I
T J
S K
R L
Q M
P O N
For å lage ein hemmeleg bokstav frå ein vanleg bokstav treng me eit tal me kan bruke som hemmeleg nøkkel. Her brukar me talet 3.
A + 3 = D T + 3 = W Å + 3 = C
Me startar med A og tel framover 3 bokstavar: B, C, D. Så bokstaven A blir bokstaven D i koden vår. For å dekode gjer me det same, men baklengs. Me startar med D og tel 3 bakover for å få A.
Steg 1: Alfabetet
Her kan du få trøbbel med norske bokstavar viss du ikkje har Python 3. Du har Python 2 viss det står 2.6 eller 2.7 i IDLE. I så fall må du leggje ein u
framfor tekst som er inni ""
. Til dømes blir alfabetet under u"abcdefghijklmnopqrstuvwxyzæøå"
. Når me legg til u
-en seier me at teksten er av typen Unicode som støttar alle norske bokstavar.
Sjekkliste
-
alphabet = "abcdefghijklmnopqrstuvwxyzæøå" print(len(alphabet))
-
Viss du har fått det til kan me starte med å kode ein bokstav.
Steg 2: Kode ein bokstav
Sjekkliste
-
Skriv inn koden under og køyr den:
alphabet = "abcdefghijklmnopqrstuvwxyzæøå" letter = "a" secret = 3 pos = alphabet.find(letter) newpos = (pos + secret) if newpos >= 29: newpos = newpos - 29 secretletter = alphabet[newpos] print(secretletter)
Me slår opp kor
a
er i alfabetet og legg til det hemmelege talet vårt for å telje framover. Me sjekkar om me har gått rundt, og viss me har det må me gå ein heil runde tilbake ved å trekkje frå 29. Dette er litt som med gradene på ein sirkel, viss me trekk frå 360 ender me akkurat der me sto i utgangspunktet. Så slå me opp i alfabetet att for å sjå kva den hemmelege bokstaven er. -
Du treng ikkje skrive dette! Alt som står bak
#
bryr Python seg vanlegvis ikkje om, det er berre kommentarar til menneske som skal lese koden.# alphabet er namnet på teksten frå a til å alphabet = "abcdefghijklmnopqrstuvwxyzæøå" # Den hemmelege bokstaven (letter) og det hemmelege talet # (secret) me brukar for å kode det letter = "a" secret = 3 # Finn posisjonen til bokstaven. Python vil gi oss eit # tal frå 0 til 28 (python tel frå 0) pos = alphabet.find(letter) # Gå like langt framover som det hemmelege talet seier newpos = (pos + secret) # Viss me har telt for langt må me gå ein runde attende # for å få eit tal mellom 0 og 28 if newpos >= 29: newpos = newpos - 29 # Slå opp denne posisjonen for å sjå kva bokstav # i alfabetet som står der secretletter = alphabet[newpos] # Skriv ut denne bokstaven på skjermen print(secretletter)
Det er mange Pyhton-ting som skjer her, men ikkje bli skremt viss du ikkje forstår alt med ein gong. Mykje av dette er akkurat som i Scratch. Linja
if newpos >= 29
er berre eiif
-setning, ein kontroll som berre køyrer koden under viss det som står etterif
er sant. Eiif
-setning brukar ein innrykksblokk, akkurat somfor
ogdef
som me har sett tidlegare.
Nå som me kan kode ein bokstav, kva med å dekode ein?
Steg 3: Finne att bokstavane
Akkurat som i koden frå den førre oppgåva skal me finne posisjonen til bokstaven, men denne gongen skal me gå bakover i alfabetet for å dekode.
Sjekkliste
-
alphabet = "abcdefghijklmnopqrstuvwxyzæøå" secret = 17 secretletter = "r" pos = alphabet.find(secretletter) newpos = pos - secret if newpos < 0: newpos = newpos + 29 letter = alphabet[newpos] print(letter)
Steg 4: Byggje funksjoner
La oss ta koden som lagar og les Cæsar-kodar og gjere den om til to funksjonar. Gi den eine funksjonen namnet encode
og den andre funksjonen namnet decode
. Tips: Viss du ikkje har høyrt om funksjonar kan du lese meir om dei i Skjelpaddeskulen.
For å få ein funksjon til å sende attende ein verdi brukar me return
. Dette gjer at me kan lagre resultatet frå funksjonen i ein variabel, og så bruke variabelen.
Sjekkliste
-
alphabet = "abcdefghijklmnopqrstuvwxyzæøå" def encode(letter, secret): pos = alphabet.find(letter) newpos = (pos + secret) if newpos >= 29: newpos = newpos - 29 return alphabet[newpos] def decode(letter, secret): pos = alphabet.find(letter) newpos = (pos - secret) if newpos < 0: newpos = newpos + 29 return alphabet[newpos] print(encode("a", 17)) print(decode("r", 17))
Hugs at du kan bruke tabulatortasten til venstre på tastaturet (rett over caps lock) i IDLE for å få innrykk. Du kan merke delar av koden og trykke tabulatortasten for å rykke inn alt på ein gong.
Steg 5: Send eit hemmeleg ord eller to, og finn dei att
No har me nokre funksjonar, la oss bruke dei til å kode ord. Me kjem til å gå gjennom kvar bokstav i ordet, og kode det viss det finst i alfabetet (me hoppar over teikn som punktum og mellomrom).
Sjekkliste
-
secret = 17 message = "hello world" output = "" for character in message: if character in alphabet: output = output + encode(character, secret) else: output = output + character print(output) secret = 17 message = "yvååc kcfåu" output = "" for character in message: if character in alphabet: output = output + decode(character, secret) else: output = output + character print(output)
-
Den fyrste delen av koden burde skrive ut
"yvååc kcfåu"
, som er den hemmelege versjonen av"hello world"
. Den andre delen dekodar det att og skriv ut"hello world"
.
Steg 6: Dekoding av nokre hemmelege beskjedar
Her er nokre hemmelege beskjedar. Prøv å dekode dei!
-
daczj ym cgyzcdmwwzf?
, hemmelegheita er 21. -
æxkxånwn næ bnwwnwn mrwn
, hemmelegheita er 9.
Prøv å sende nokre beskjedar til venene dine! Kva med å lage eit Python-program som prøver seg på alle moglege hemmelege tal og prøver å knekke kodar sjølv om du ikkje kan det hemmelege talet?
Forbedre denne siden
Funnet en feil? Kunne noe vært bedre?
Hvis ja, vennligst gi oss tilbakemelding ved å lage en sak på Github eller fiks feilen selv om du kan. Vi er takknemlige for enhver tilbakemelding!