Monokanaaliset kryptot

Skip to content

Tämä on konekäännetty teksti, joka saattaa sisältää virheitä!

Krypto-opetustehtävistä

Nämä tehtävät on järjestetty hieman eri tavalla kuin muut tehtävät Piggyltä; mietimme vielä, mitä te etuisemmin pidätte! 😎

Tässä vaiheessa esitellään ensin aiheisiin liittyvää tietoa ja sen jälkeen tulee muutama tehtäväkin!

“Tasoja” tässä tehtävässäkseen ei ole aivan samankaltaisia kuin aikaisemmissa tasoissa – asiat ovat nyt aiherajoitteisempia osioituun rakenteeseen perustuen.

Siirry suoraan tehtäviin

Mikä on “Cipher”?

Oletko koskaan halunnut kirjoittaa salaisen viestin ystävälle, jota kukaan muu ei voi ymmärtää? Silloin tarvitset Cipherin, tai suomeksi salakirjoituksen! Salakirjoitus on yksinkertaisesti menetelmä, joka muuttaa tavallisen tekstin “koodiksi” korvaamalla merkit (usein kirjaimet) muilla merkeillä. Tuloksena näyttää hölynpölyltä niille, jotka eivät tiedä, miten koodi toimii. Ajatuksena on, että vain ne, jotka tuntevat avaimen (säännön kirjainten vaihtamiseksi), voivat tehdä koodista jälleen ymmärrettävän. Toisin sanoen: salakirjoitukset mahdollistavat salaiset viestit, olipa kyseessä lapsuuden leikki salakielellä tai oikeat vakoojat, jotka lähettävät salattuja viestejä. 😄

Tiesitkö?

Sana “koodi” juontuu todellisuudessa arabiankielisestä sanasta sifr, joka tarkoittaa ”nollaa”. Ehkä siksi, että salakirjoitus näytti tyhjänä (ei merkitystä!), kun ihmiset eivät pystyneet ratkaisemaan sitä!

On olemassa monenlaisia salakirjoja – jotkut käyttävät numeroita, jotkin merkkejä ja nykyaikainen datansalaus käyttää erittäin monimutkaisia algoritmeja. Nämä vaativat äärimmäisen hankalaa matematiikkaa, joten voimme ensin tutustua yksinkertaisempiin algoritmiin!

Monoalfabetiset salaukset

Katsotaan ensin joitakin yksinkertaisimpia (ja vanhimpia) salausmenetelmiä: monoalfabetiset salaukset.

Monoalfabetinen saattaa kuulostaa vaikealta sanalta, mutta voimme jakaa sen osiin: mono tarkoittaa “yksi”, ja alfabetinen liittyy aakkosiin.

Siis monoalfabetiset salaukset ovat koodeja, joissa käytetään yhtä ainoaa “salausaakkostoa” koko viestin ajan. Tämä tarkoittaa, että jokainen alkuperäisen tekstin kirjain vaihdetaan aina samaan kirjaimeen koko salatun viestin ajan.

Esimerkiksi, jos olet päättänyt, että A vaihdetaan X:ään, kaikki A:t tekstissä muutetaan X:ksi.

Cæsar-salakirjoitus

Klassinen esimerkki monoalfabeettisesta salakirjoituksesta on Cæsar-salakirjoitus (saanut nimensä Juliuksesta Caesarista). Tämä on pohjimmiltaan sääntö, jossa kaikki kirjaimet “siirretään” tietty määrä paikkoja eteenpäin aakkosissa. Väitetään, että Caesar itse käytti 3 kirjaimen siirtoa salaisissa viesteissään. Se toimii niin, että A muuttuu D:ksi, B muuttuu E:ksi, C muuttuu F:ksi ja niin edelleen aakkosten läpi. (Kun mennään Z:n ohi, aloitetaan uudelleen A:sta.) Viesti, joka on ABC, muuttuisi siis DEF:ksi, jos käytämme Caesarin menetelmää.

Kukaan ei odota viestiä Caesarin koodilla?

Ceasar Cipher Meme

Näin Caesarin salaus toimii käytännössä:

  • Valitse avain: Päätä salainen luku (esimerkiksi 3), joka määrittää, kuinka monta paikkaa jokaista kirjainta siirretään.
  • Vaihda jokainen kirjain: Etsi jokaiselle alkuperäisen viestin kirjaimelle kirjain, joka on niin monta paikkaa sen jälkeen aakkosissa (avaimella 3 A muuttuu D:ksi, B muuttuu E:ksi jne. – muista palata A:han uudelleen Z:n jälkeen tarvittaessa). Voit halutessasi sisällyttää myös Ä, Ö ja Å, mutta tämä on hieman monimutkaisempaa.
  • Salattu viesti: Korvaa kirjaimet ja kirjoita uusi viesti “siirretyillä” kirjaimilla. Kas – sinulla on lukematon, salainen teksti, jonka vain avaimen omaavat voivat ymmärtää!
  • Purkaaksesi salauksen (eli muuttaaksesi sen takaisin luettavaksi tekstiksi) tee vain vastakkainen siirto takaisin. Jos tiedät avaimen (esim. 3), viestin lukeminen on yhtä helppoa siirtämällä kirjaimet 3 taaksepäin aakkosissa.
Turvallisuus?

Nämä koodit eivät ole kovin turvallisia pitkällä aikavälillä. Koska kuvio (substituutio) on kiinteä, kärsivällinen henkilö tai joku älykkäiden temppujen avulla voi helposti paljastaa salaisuuden. Esimerkiksi Caesarin salauksessa on vain muutamia mahdollisia siirtoja, yhtä monta kuin aakkosissa, joten kuka tahansa voi kokeilla kaikkia, kunnes viesti alkaa järkeillä – tai käyttää kirjainten esiintymistiheyksiä arvatakseen oikean ratkaisun. Toisin sanoen, ehkä älä käytä Caesarin salausta erittäin salaisiin päiväkirjamerkintöihin tai valtion salaisuuksiin 😉.

Monoalfabeettiset salaukset ovat loistava tapa oppia salauksen periaate. Ne ovat yksinkertaisia ja osoittavat, kuinka voimme käyttää yksinkertaista sääntöä (avainta) muuttaaksemme ymmärrettävän tekstin mysteeriseksi ja käsittämättömäksi – ja takaisin. Joten seuraavan kerran, kun haluat lähettää ystävällesi salaisen viestin, voit käyttää Caesarin salausta! Ehkä voisitte luoda oman version Caesarin salakirjoituksesta? 🔐✨


Tehtävät

Ohjelmointikieli?

Kuten aiemmin, voit käyttää mitä tahansa haluamaasi ohjelmointikieltä! Esimerkit tässä ovat Pythonilla.

Medium Tehtävä 1.1 - Caesarin salaus

Nyt kirjoitetaan itse koodia! Aloitetaan helposti salauksen toteuttamisella, teorian perusteella sen pitäisi olla melko suoraviivaista.

Toteuta salaus Caesarin salauksella käyttämällä funktiota, joka ottaa sisään tekstin ja luvun, joka on “avain”, eli kuinka paljon aakkostoa kierretään.

Vinkkejä toimintatapaan.
  1. Luo funktio nimeltään caesar, joka ottaa vastaan koodattavan teksti ja “siirron”, eli kuinka monta askelta alfabetissa tekstiä siirretään.
  2. Käy läpi kirjain kirjanjalta tekstissä.
  3. Emme halua “siirtää” muita merkkejä kuin kirjaimia: selvitä miten tarkistat että merkki tekstissä on kirjain.
  4. Meidän tulee “kierrättää” kirjainta n askeleella, eli meidän täytyy lisätä kierto: selvitä miten voit muuttaa tekstin numeroiksi jotta voit lisätä siiton. [Vihje:] ord()-funktio.
  5. Muista!* Tässä saat eri arvoja sen perusteella kirjoitatko pieniä vai suuria kirjaimia. Viittaa ASCII-taulukkoon.
  6. Kun sinulla on arvo se on niin yksinkertaista kuin additaaminen arvon n. Mutta mitä tapahtuu jos olet aakkosten lopussa? Saamme vain roskaa Z-kirjaimen jälkeen. Miten tämä korjataan? Tämä vaatii hieman ajattelua.
Koodauksen korjaus.

Jotta kryptoinnin voi korjata kokonaan tarvitaan vähän miettimistä.

  • Ensimmäinen askel on harkita modulo-operaattorin käyttöä %.
  • Koska aakkosto (englanniksi) koostuu 26 kirjasimesta, voimme ottaa moduulin luvun avulla 26.
  • Mutta tämä ei toimi täysin oikein; näetkö syyn?
  • Yritä tulosta merkin arvo käyttämällä ord(), mitkä saadaan?
  • Arvolla a saat 97. Jos otat moduluksi tämän arvion saadaksesi modulo, voit saada vastaus välillä 0 ja numeroon asti aina kun käytät sitä. (Huom: Alkuperäinen teksti oli epätäsmällisin osalta muotoilusta) -> Oikeasti: jos teette operaation modulus(5), niin se antaa palautuksena numerot välein 1..4 tai vastaava määrä riippuen siitä mitä haluat tehdä sen jälkeen… Eli siis esimerkiksi (x % n) jossa x = alkupiste + lisättävä lukumäärä yms., mutta koska emme voi edes tarkistaa oliko siinä jotain virheellistä ennen kuin meidän piti laskea uudelleen kaikki läpi alussa olevan vaiheen mukaan (eli ensin pitäisi tietää mikä on suurimman mahdollisen perusarvon määrän mukainen laskenta). Tämä johtuu tietenkin myös siitä että “kierto” ei ole sama asia kuin itse kierrätysprosessin suorittaminen! Joten tässä tapauksessa voimme käyttää modulo-operaatiota korjataksen tilanteen oikealle tavalla eli tekemällä hieman enemmän työtä etukäteisessä asennuksessa/valmisteluissa jotta saadaan lopputulos sujuvasti automaattisesti ilman manuaalista interventioita.
  • Tätä voidaan parantaa tallentamalla iso- ja pieneiden kirjainten aloitusarvot, vähentämällä näitä kirjaimeista sekä ottamalla sitten moduulioperaatio. Tällöin tulee: (ord(kirjain) - ord('a')) % 26
  • Saadaksesi takaisin oikean kirjeen lisättään vain alkuperäinen arvo jälleen kertaansa.
    (Huom: Tekstissä mainitaan ‘print’ mutta tämä tarkoittaa todellisuudessa ohjelmoijan kannalta tulostamista konsoliin) -> Eli siis jos käytämme print-komentoa niin se antaa meille mahdollisuuden tarkistaa mitä tapahtui laskennassa tai muuttujien arvossa… Esimerkiksi print(ord("A")) antaisi meille numeron vastaavan A:n ASCII-arvon (eli 65), mikä on tärkeää ymmärtää koska meidän pitää tietää milloin siirtyminen alkaa uudelleen nollasta eli kun pääsemme Z:iin asti jolloin pitäisi palata takaisin A:han automaattisesti ilman manuaalista interventioita! Tämä vaatii hieman enemmän työtä etukäteen suunnittelussa ja testauksessa varmistamaan että kaikki toimii odotetusti ennen kuin lopullinen versio julkaistaan käyttäjille maailmanlaajuisesti verkkoalustoilla kuten GitHubissa, GitLabissa tms.!

  • Lopuksi voimme helposti käyttää chr()-funktiota saadaksemme kirjeen muodosta numeerisen arvojen perusteella. Tässä tapauksessahan ei tarvitse tehdä mitään erillisiä operaatioita vaan vain kutsuta funktiota parametrina annettaessa haluamamme kirjain merkkijonoformaatin sisälle esim.: python print(chr(97)) # Tulostaa 'a' Eli siis jos haluaisit saada tulokseen “Hello World!” niin voisit kirjoittaa näin: python hello_world = ["H", "e", "l", "l", "o"] + [chr(ord(c)+1) for c in "! "] result =" ".join(hello\_world+result.split()[0])# Lisätään välilyönti väliin if len(result)>len(" Hello ") else None\print(f"Resultaatiksi tuli {result}")\nTämä esimerkki näyttää kuinka helppoa on luoda ohjelmakoodia Python-kielellä! Toivottavasti tämä auttoi sinua ymmärtämään paremmin miten toimii salausmenetelmä Caesar Cipher ja miksi se vaatii hieman enemmän työtä etukäteen suunnittelussa kuin mitä saattaa aluksi tuntua… Mutta lopulta kun kaikki asiat ovat kohdallaan ja testattu hyvin, silloinhän meillä olisi valmis tuote joka voisi olla hyödyksi monelle ihmiselle maailmanlaajuisesti verkkoalustoilla kuten GitHubissa tai GitLabissa tms.! Kiitos lukemisesta toivotamme menestystä projektiinne!! 🎉👏

Ratkaisu:
def caesar_cipher(text, shift):
    result = ""
    for char in text:
        if char.isalpha():
        # etsi aloituspiste suuraakkosten ja pienaakkosten perusteella
        start = ord('A') if char.isupper() else ord('a')
        # Vaikea siirron laskenta
        result += chr((ord(char) - start + shift) % 26 + start)
    else:
        result += char
    return result

Easy Tehtävä 1.2 - Caesarin salauksen purkaminen

Purkaminen on vain käänteinen laskutoimitus salaukseen verrattuna. Vähennät siirtymän lisäämisen sijaan.

Vinkkejä toimintatapaan

Käytä tehtävässä 1 luomiasi funktioita tähän.Tee sama funktioni vain käänteisesti.Voit tehdä tämän muuttamalla siirron kaavalla 26-siirtyma.

Ratkaisu:
def caesar_decrypt(text, shift):
    return caesar_cipher(text, 26 - shift)

Muita Monoalfabeettisia Salakirjoituksia (esim. Atbash)

On olemassa muitakin monoalfabeettisia salakirjoituksia! Yksi yksinkertaisimmista on niin kutsuttu “Atbash” -salakirjoitus.

Miten Atbash toimii?

Tämä on hyvin yksinkertainen, rotaation sijaan kirjaimet kuvataan vastakkaiseen aakkostoon. Tässä taulukko, joka näyttää kuvauksen:

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
z y x w v u t s r q p o n m l k j i h g f e d c b a

Medium Tehtävä 1.3 - Atbash-salauksen salaus ja purku

Atbashin hieno puoli on se, että koska salaus on 1:1-muunnos, se toimii suoraan käänteisesti. Toisin sanoen, jos olet luonut salauksen, olet myös automaattisesti luonut purun.

Miten tämä voidaan tehdä käytännössä?

Voit joko vähentää kirjaimen arvosta Z, tai luoda “Look-up” -taulukon. Eli taulukon tai sanakirjan, joka sisältää kaikki kirjaimet a:sta z:aan ja mitä niistä tulee. Tämä voi olla hyvä ratkaisu, jos haluatte luoda erilaisen salauksen.

Taulukon haku-implementaatio.
letters = {
    'a': 'z'
    'b': 'y'
    'c': 'x'
    'd': 'w'
    # ... lisää loput kirjaimet alaspäin
}

Tämän taulukon avulla voit käydä läpi kirjaimen kerrallaan, hakea arvon kirjaimelle haku-taulukosta ja kirjoittaa sen ulos. Mitä sinun täytyy tehdä isoille ja pienille kirjaimille?


Osa 2 - Monoalfabeettisten salauksen analysointi

Tässä osassa yritätte luoda algoritmin “murtamaan” Caesarin salaus, eli ottamaan salatun tekstin ja palauttamaan alkuperäisen tekstin ilman, että tiedätte avainta.

Tämä voi olla tehty jossain määrin manuaalisesti, tai voit yrittää käyttää yksinkertaista “kryptanalyysiä”. Tämä on käsite, jota tarkastelemme syvällisemmin myöhemmin, mutta nyt tarkastelemme vain yhtä yksinkertaisimmista tavoista: Frekvenssianalyysi (frequency analysis). Voit lukea lisää tästä käsitteestä täältä: Frequency Analysis tai täältä Wikipedia - frequency analysis.

Tätä menetelmää voidaan käyttää muussa kuin Caesarin salauksessa, sitä voidaan käyttää myös monimutkaisemmissa algoritmeissa, mutta Caesarin salaus on niin yksinkertainen, että frekvenssianalyysi on triviaali.

Miten taajuusanalyysi toimii?

Taajuusanalyysi on, kuten nimestäkin voi päätellä, tapa tarkistaa kirjainten esiintymistiheys tekstissä. Miksi tämä voisi olla hyödyllistä? Kuvittele, että sinulla on pitkä teksti, oletetaan englanninkielinen teksti, peräisin Wikipedia - frequency analysis:

In cryptanalysis, frequency analysis is the study of the frequency of letters or groups of letters in a ciphertext. The method is used as an aid to breaking classical ciphers.

Frequency analysis is based on the fact that, in any given stretch of written language, certain letters and combinations of letters occur with varying frequencies. Moreover, there is a characteristic distribution of letters that is roughly the same for almost all samples of that language. For instance, given a section of English language, E, T, A and O are the most common, while Z, Q, X and J are rare. Likewise, TH, ER, ON, and AN are the most common pairs of letters termed bigrams or digraphs), and SS, EE, TT, and FF are the most common repeats. The nonsense phrase ETAOIN SHRDLU represents the 12 most frequent letters in typical English language text.

In some ciphers, such properties of the natural language plaintext are preserved in the ciphertext, and these patterns have the potential to be exploited in a ciphertext-only attack.

Jos muutamme tämän tekstin Caesarin salauksella (ja poistamme pilkut, välilyönnit ja muut erikoismerkit), saamme seuraavan salatekstin:

xcrgneipcpanhxhugtfjtcrnpcpanhxhxhiwthijsnduiwtugtfjtcrnduatiitghdgvgdjehduatiitghxcprxewtgitmiiwtbtiwdsxhjhtsphpcpxsidqgtpzxcvraphhxrparxewtghugtfjtcrnpcpanhxhxhqphtsdciwtupriiwpixcpcnvxktchigtirwdulgxiitcapcvjpvtrtgipxcatiitghpcsrdbqxcpixdchduatiitghdrrjglxiwkpgnxcvugtfjtcrxthbdgtdktgiwtgtxhprwpgpritgxhixrsxhigxqjixdcduatiitghiwpixhgdjvwaniwthpbtudgpabdhipaahpbeathduiwpiapcvjpvtudgxchipcrtvxktcphtrixdcdutcvaxhwapcvjpvttippcsdpgtiwtbdhirdbbdclwxatofmpcsypgtgpgtaxztlxhtiwtgdcpcspcpgtiwtbdhirdbbdcepxghduatiitghitgbtsqxvgpbhdgsxvgpewhpcshhttiipcsuupgtiwtbdhirdbbdcgtetpihiwtcdchtchtewgphttipdxchwgsajgtegthtcihiwtbdhiugtfjtciatiitghxcinexrpatcvaxhwapcvjpvtitmixchdbtrxewtghhjrwegdetgixthduiwtcpijgpaapcvjpvteapxcitmipgtegthtgktsxciwtrxewtgitmipcsiwthtepiitgchwpktiwteditcixpaidqttmeadxitsxcprxewtgitmidcanpiiprz

Tämä teksti näyttää mahdottomalta murtaa, mutta “taajuusanalyysin” avulla se ei ole vain mahdollista, vaan helppoa.

Katso seuraavaa kuvaa:
English frequency distribution

Tämä on kuva, joka näyttää kirjainten jakauman englanniksi. Kuten voimme nähdä, kirjain E on yleisin kirjain, jota seuraavat T, A ja O.

Tämä voidaan muuttaa taulukoksi ja sitten käyttää laskemaan ja analysoimaan tiettyä salatekstiä, jotta se voidaan “murtaa”. Alla olevissa tehtävissä sinun on luotava ohjelma, joka voi “murtaa” Caesarin salauksen itsenäisesti. On totta, että Caesarin salaus on niin yksinkertainen, että voit vain tarkistaa kaikki 26 mahdollisuutta manuaalisesti, mutta tässä aiomme löytää ratkaisun täysin automaattisesti.

Easy Tehtävä 2.1 - Taajuustaulukon luominen

Luo python-tiedostoon taajuustaulukko englannin kielen kirjaimille. Voit yrittää löytää tämän itse, mutta jos et jaksa, ymmärrämme sen!

Jos todella haluat löytää sen itse, voit tehdä kuten Tehtävässä 2.2, mutta hyvin suurella tekstillä.

Englannin kirjainten yleisyys (Vastaus)
english_letter_frequency = {
    'E': 12.70, 
    'T': 9.06, 
    'A': 8.17, 
    'O': 7.51, 
    'I': 6.97, 
    'N': 6.75, 
    'S': 6.33, 
    'H': 6.09, 
    'R': 5.99, 
    'D': 4.25, 
    'L': 4.03, 
    'C': 2.78, 
    'U': 2.76, 
    'M': 2.41, 
    'W': 2.36, 
    'F': 2.23, 
    'G': 2.02, 
    'Y': 1.97, 
    'P': 1.93, 
    'B': 1.29, 
    'V': 0.98, 
    'K': 0.77, 
    'J': 0.15, 
    'X': 0.15, 
    'Q': 0.10, 
    'Z': 0.07
}

Medium Tehtävä 2.2 – Kirjaimien esiintymistiheyden laskeminen tekstissä

Nyt luomme algoritmin, joka laskee kirjaimien esiintymistiheyden annetussa tekstissä.

Vinkkejä etenemiseen
  1. Aloita funktiosta, joka ottaa vastaan tekstin (voi olla mitä tahansa).
  2. Luo funktiossa “dictionary” (Python Dictionaries), jossa on merkintä jokaiselle aakkosten kirjaimelle, asetettuna arvoon 0. ({'A' = 0, 'B' = 0, 'C' = 0, ..., 'Z' = 0})
  3. Käy koko teksti läpi ja laske jokainen kirjain (lisää 1 vastaavaan sanakirjan merkintään). Tässä kannattaa todennäköisesti jättää huomiotta merkit, jotka eivät ole kirjaimia, ja muista myös suuraakkoset ja pienaakkoset.
  4. Pidä kirjaa siitä, kuinka monta kirjainta on laskettu yhteensä.
  5. Kun olet valmis laskemaan, jaa / taulukon jokainen arvo tekstin pituudella ja kerro sitten sadalla, mikä antaa sinulle prosentuaalisen frekvenssin. (Voit tietysti myös antaa taulukkosi arvojen olla välillä 0 ja 1).
  6. Nyt sinulla pitäisi olla tekstin frekvenssitaulukko.

Medium Tehtävä 2.3 – Tekstin frekvensin vertaaminen todelliseen frekvenssiin

Kun olet löytänyt kaikkien tekstin kirjainten frekvenssin, voit luoda funktion, joka löytää “etäisyyden”. Häh? Mitä sillä tarkoitetaan?!

Voit kuvitella, että esimerkiksi kirjaimen E frekvenssi tekstissä on luku. Voit löytää “etäisyyden” tälle verrattuna todelliseen frekvenssiin, joka on 12.70. Esimerkki: Frekvenssi on 9.63, mikä on etäisyys? Etäisyys on näiden kahden arvon välinen absoluuttinen arvo (negatiivisista luvuista tulee positiivisia): \(12.70 - 9.63 = 3.07\).

Luo funktio, joka käy läpi jokaisen kirjaimen ja löytää etäisyyden. Lisää sitten kaikki etäisyydet yhteen “kokonais”etäisyydeksi.

Matemaattinen funktio?

Jos mietit, miltä tämän matemaattinen funktio näyttää, se on seuraavanlainen:

\(\sum_{n=0}^{N} \lvert a - b\rvert\)

Vinkkejä etenemiseen
  1. Käytä for-silmukkaa käydäksesi läpi koko taajuustaulukon.
  2. Etsi jokaiselle taajuustaulukon merkille itseisarvo verrattuna todelliseen taajuuteen. Käytä tätä varten Pythonin abs()-funktiota.
  3. Laske kaikki arvot yhteen, niin saat lopputuloksen.

Hard Tehtävä 2.4 – “Murtakaa” Caesarin salaus

Nyt yhdistetään kaikki, mitä olemme tähän mennessä tehneet! Nyt “murretaan” Caesarin salaus.

Tee ohjelma, joka “murtaa” Caesarin salauksen! Ilman käyttäjän vaikutusta sinun pitäisi pystyä syöttämään salattu teksti ja hakemaan salattu teksti ilman, että tarvitset avainta.

Test data

Tässä on jotain testidataa, mitä sanotte tästä?

Test-data
cqrbvnbbjpnrbjenahbnlancxwnqxynoduuhhxdjanjkuncxmnlxmnrclxvyuncnuhjwmqnanjanbxvnfxamboaxvxdaojexarcnsnmrqnuuxcqnanrcbxenajwjtrwrqjencqnqrpqpaxdwmhxdfnanarpqccqnwnpxcrjcrxwbfnanbqxac
lsaizivxlmwqiwwekimwuymxiwlsvxwsmxqmklxrsxasvoewibtigxihlsaizivmjmxhsiwksshnsf
bmtxymjwjsfdfsxbjwrjxyfsifsizsktqidtzwxjqkqtslqnajymjpnslgfwsfwitmjdtzhtrjrtxyhfwjkzqqdzutsdtzwmtzwynxstbxywzhpybjqajljyymjjytgjikwfshnxhtktwymnxwjqnjkrzhmymfspxynxgnyyjwhtqifsinfrxnhpfymjfwymfajdtzmfivznjylzfwistyfrtzxjxynwwnslbjqqlttisnlmynkdtzitrjjymtwfyntfsirfwhjqqzxymjwnafqxtkrdbfyhmgniymjrrfpjmfxyj
zwkyvivrivrepzuzfkjzekyviffdnzcckyvpgcvrjvjkreulgjrzukyvjritrjkztkvrtyvirwkvircfexjzcvetvfevwivjydreifjvkfyzjwvvkefnkyvedzjkvinypufpfltfejzuvipflijvcwrezuzfkzehlzivukyvkvrtyvinzkyrjevvinvccrtklrccpzufekjrzukyvjkluvekslkzyrkvkfjvvpfljkreuzexlgkyvivrccsppflijvcw
uwwilxchaniuffehiqhfuqmizupcuncihnbylycmhiqusuvyymbiofxvyuvfynizfscnmqchamulyniimguffniayncnmzunfcnnfyvixsizznbyaliohxnbyvyyizwiolmyzfcymuhsqusvywuomyvyymxihnwulyqbunboguhmnbchecmcgjimmcvfysyffiqvfuwesyffiqvfuwesyffiqvfuwesyffiqvfuweiibvfuweuhxsyffiqfynmmbueycnojufcnnfyvullsvlyuezumncmlyuxswigcha
Vinkkejä toimintatapaan
  1. Aloita luomalla funktio, joka ottaa vastaan tekstiä.
  2. Käytä Caesar-sifrin dekryptiofunktiota tekstille rotaatiolla N, missä N alkaa nollasta.
  3. Luo tuloksesta taajuustaulukko.
  4. Laske etäisyys tulokseen suhteessa todelliseen taajuustaulukkoon.
  5. Joko: a) pidä kirjaa etäisyydestä listassa, tai b) pidä kirjaa pienimmästä arvosta ja rotaatiosta (tämä on avain).
  6. Kasvata rotaatiota yhdellä ja toista vaiheet 2–6, kunnes N saavuttaa 26 (täysi rotaatio).
  7. Palauta dekryptattu teksti, eli pienin etäisyys on oikea avain.