>> ROB: Saluton, mi estas Rob, kaj ni deĉifri la Vigenère programo.
Do unue ni devas fari estas fari certa ke la uzanto eniris kion ni atendis
ilin en la komandlinio.
Do se argc ne 2 kiu signifas ĉu la uzanto ne eniris la kordo ni
volas esti uzanta kiel nia kodi kordo, aŭ ili
eniris tro multajn aferojn.
Kaj ni ne scias kion fari kun tiuj aliaj aferoj.
>> Do ni diru al ili kion ili devus esti eniris.
Kaj ni revenas.
Nun, supozante ke argc estis 2, ni povas daŭrigi kun la resto de la programo.
>> Ni alias la nomo de argv [1]
en la variablo ŝlosilvorto.
Por ke ni ne devas uzi la nomon argv [1]
dum la tuta resto de la programo.
Kaj eble ni forgesas kion tio signifas, kaj tiel plu.
Aŭtoro estas multe pli agrabla nomo.
Kaj ni vidos tuj havigu la longo de nia ŝlosilvorto ĝuste ĉi tie.
>> OK, do nun ni volas kontroli, ke nia ŝlosilvorto estas efektive validas.
La ŝlosilvorto ni uzu por ĉifri kordoj devus esti simple alfabeta
karakteroj.
Se la uzanto eniris la ne-alfabeta karakteroj, ni dirus, ke ŝlosilvorton
devas enhavi nur A tra Z kaj tiam revenu.
Do tiu buklo ripetas super ĉiuj signoj de nia ŝlosilvorto, kontrolanta
ke se oni ne estas alfabeta tiam ni bezonas presi tiun averton.
>> Nu, iam ni atingos ĉi tiun punkton, ni scias ke kordoj devas esti ĝusta.
La ŝlosilvorto devas esti ĝusta.
Kaj nun ni bezonas por akiri la mesaĝon de la uzanto kiu volas nin
ĉifri kun tiu klavo frazon.
Do por atingi tiun mesaĝon, ni havi fari dum buklo ke tuj
senĉese akiri kordo de la uzanto ĝis ili entajpi validan kordo.
>> Daŭrigante, oni vidas tie ĉi variablo, int nun_letters_seen.
Ni vidos, kial ni bezonas ke en sekundo.
Sed tio por buklo tuj persisti de i egalas 0 tuta vojo supren al i
egalas n, kiu signifas ni ripetanta super ĉiuj ebla
karakteroj en nia mesaĝo.
Ĉar ni volas kodi ĉiujn la karakteroj en nia mesaĝo.
Do rimarki ni faru se (isalphamessage [mi], ĉar ni ne volas ĉifri
karaktrojn kiuj ne estas alfabeta.
Se tie estas simboloj, spacoj, aŭ nombroj, ni ne
volas kodi tiuj.
>> Nun, supozante, ke ĝi estas alfabeta, ni unue volas eltrovi, kion ni
reale volas ĉifri la mesaĝon uzante.
Do kion mi celas per tio?
>> Supozu ke la ŝlosilo frazon la uzanto tajpis abc.
Tio estas kion ni uzas por ĉifri.
Nun, naive, ni opinias, ke signifas, ke ni volas kodi la unua gravulo
de nia mesaĝo per 0, ekde duona turnanta la karaktero per 0.
>> Ni volas kodi la duan karaktero per 1, tria karaktero per 2,
la kvara karaktero per 0, la kvina per 1, la sesan de 2, kaj tiel plu.
Sed memoru, ke ni volas salti spacoj kaj simboloj kaj nombroj.
Tio signifas, ke se la uzanto jam eniris saluton mondo kiel la mesaĝon
ke oni volas kodi, tiam ni volas kodi la h per 0
responda al la a, la TTT per 1, La l de 2, la l per 0, la o per 1.
Ni volas preterpasi la spaco, ĉifritajn la w de 2, la o per 0, 1, 2, 0.
Do rimarki, se ni ne saltis la spaco, tiam ni devus esti ĉifrita
la w per 0 kaj finis kun la malĝusta kordo.
>> OK, tio estas, kion ni bezonas la variablo num_letters_seen por.
Se ni simple tuj ĉifri uzante ĉi tiu metodo, kiu ne volas salti
simboloj, spacoj, kaj nombroj, tiam ni povus simple uzi la variablo i kiel kio
al indekso en nian klavo frazon kun.
Ni bezonas uzi num_letters_seen teni spuro de la efektiva loko en la
ŝlosilo frazo kiun ni volas indekso.
Do ĉi tie, se la ŝlosilvorto ni havas, se num_letter_seen mod keyword_length, tiel
kial ni bezonas mod per ŝlosilvorto longo?
>> Nu, saluton mondo estis bona ekzemplo.
Se la ŝlosilvorto estis abc, tiam ni bezonas senĉese ĉifri per tiam b
tiam c, tiam wrap reen ĉirkaŭe, a, b, c, a, b, c.
Do ni bezonas mod per ŝlosilvorto longo por enpaki reen ĉirkaŭe.
>> Do se tiu estas majuskla litero, do ni volas kodi per la
pozicio de tiu litero en la alfabeto, kiun ni ricevas per nur
subtrahanta el ĉefurbo A. Tiam simile, por minusklaj literoj, ni
povos atingi la sxlosilon, ke ni volas per subtrahanta el minusklaj a.
Do sendistinge de ĉu la letero en la ŝlosilo frazon estis ĉefurbo aŭ
minuskla litero, ni iras al ĉifri per la sama sumo.
>> Nun ke ni havas niajn ŝlosilon, oni vidas tie, ke se mesaĝon i estas majuskle
karaktero, tiam ni volas kalkuli la pozicio en la alfabeto de tiu
karaktero, aldonu nia ŝlosilo al tio, enpaki reen ĉirkaŭe tiel, ke se ni iris preter
z ni reiru al a, b, c, kaj tiel plu.
Poste, fine, aldonu denove sur ĉefurbo A. Do ni ŝanĝi reen en la [? Ascii?]
gamo de tiuj signoj anstataux la numera pozicio en la alfabeto
de tiuj signoj.
>> Kaj ni faru la samon por minuskla signoj.
Krom ni volas subtrahi el minusklaj a kaj aldoni ĝin denove sur la
Fine, minuskla a.
Rimarku ke num_letter_seen estas nur incremented se mesaĝon i estis
alfabeta.
Jen kiel ni saltos spacoj, simboloj, kaj nombroj en niaj ŝlosilaj frazo, ekde
num_letter_seen estas kio ni uzas al indekso en nian ŝlosilvorto.
>> Fine, en la fino, nun tiun mesaĝon i estis ĉifrita, ni
presi mesaĝon i.
Kaj tio estas ĝi.
Mia nomo estas Rob.
Kaj jen estas Vigenère.
>> [MUZIKO Ludanta]