12. Krüptograafia

Kodune lugemine

Caesari šiffer: https://en.wikipedia.org/wiki/Caesar_cipher

Vigenère šiffer: https://en.wikipedia.org/wiki/Vigenère_cipher

ASCII tabel: https://en.wikipedia.org/wiki/ASCII

Viited

Punkte saab antud ülesande eest järgnevate tulemuste järel:

  • Programm suudab tuvastada ja töödelda käivitamisel kaasa antud argumendid ning vigase käivituse korral kuvab veateate, mis juhendab kasutajat programmi õigesti kasutama
  • Caesari šifri abil on võimalik programmiga krüpteerida ja dekrüpteerida sõnumeid
  • Vigenère šifri alusel on võimalik programmiga küpteerida ja dekrüpteerida sõnumeid

Soovitavalt võiks programmis olla kasutatud vähemalt kolme enda loodud funktsiooni lisaks main() funktsioonile, kuid vastavalt enda paremale äranägemisele võib neid rohkem/vähem olla.

  • Veateate kuvamiseks
  • Krüpteerimiseks
  • Dekrüpteerimiseks

Soovituslik töökäik (caesar)

  1. Proovi näidisprogrammi – vaata mis juhtub kui anda erinevaid algandmeid ette – nii sobivaid kui ka ebasobivaid.
  2. Alusta programmeerimist käivitusel kaasa antavate argumentide kontrollist
    1. Veendu, et argumentide arv oleks õige
    2. Veendu, et kaasa antav töökäsk oleks õige (krüpteerimine / dekrüpteerimine)
    3. Tekita kasutajat abistav tekst. Kuva abitekst olukorras mil kasutaja käivitab programmi ebasobivate parameetritega. Pane see alamfunktsiooni ning kutsu välja kus vaja.
      Alamfunktsioonist programmi sulgemiseks saad kasutada funktsiooni exit(), mis paikneb stdlib.h teegis.
  3. Tuvasta ja vajadusel töötle kaasa antud võti. Mõtle mis juhtub kui võti pikem tähestiku pikkusest (nt 31). Abiks nt sscanf() või atoi().
  4. Loe kasutajalt sisse krüpteeritav / dekrüpteeritav sõnum (abiks võid kasutada nt gets() funktsiooni).
  5. Käivita krüpteerimine/dekrüpteerimine vastavalt töökäsule.
  6. Tähemärkide töötlusel lähtu ASCII tabelist. Mõtle läbi kõik olukorrad.
    1. Kuidas käsitletakse väikest tähte?
    2. Kuidas käsitletakse suurt tähte?
    3. Kuidas käsitletakse tühikut, numbreid ja teisi kirjavahemärke?
    4. Kuidas käsitletakse olukordi, kui nihke tõttu tuleb tagasi tähestiku algusesse minna?
      Vihjeid: tähemärke saab liita ja lahutada. Nt:
      ’d’ – ‘a’ annab tulemuseks 3 või vastupidi ‘a’ + 3 annab tulemuseks ’d’.
      Moodularvutus – 29 % 26 annab tulemuseks 3.
  7. Väljasta tulemus

Vigenère jaoks võid kasutada sama malli. Tähelepanu pööra šifri rakendamisele.

Katseandmed

Katseandmed Caesari šifrile

Tekst Võti Tulemus
tere 0 tere
maasikamoos 4 qeewmoeqssw
tElEtuPs 18 lWdWlmHk
Trammikaaperdus, pool 4, voilille peatus! 18 Ljseeacsshwjvmk, hggd 4, ngadaddw hwslmk!

Katseandmed Vigenère šifrile

Tekst Šiffer Tulemus
maailm a maailm
narwhal ebc rbtaicp
kiVIpaLLUR ole ytZWaeZWYF
Narwhals Narwhals, swimming in the ocean eXirP Rxznweia Epvtpraw, pezbqfvx xr qpv dgbie
Salasõnum
šiffer: aYiFQz

Krüpteeritud tekst: Ncdjh folvf whvc gtk tp; Lmauq gmvsq ker gtk couv; Suuep otdma pcs qqosvi qmd bmxuqt wwz