>> [MUSIC Playing]
>> ZAMYLA CHAN: Lad os implementere Vigenere, en lidt mere
sikre cipher end Cæsar.
Den klartekst krypteres ved hjælp af en streng i stedet for et heltal.
Hver bogstav i klartekst forskydes med et
bogstav i søgeord.
>> I dette eksempel nøgleordet ohai, O svarer til en forskydning på 14 H til en
skift på 7; A, skift af 0, og jeg et skift på 8.
Hvis du med held har implementeret din Caesar cipher, det vil være en god
rammer, hvorfra du kan implementere Vigenere.
Som du kan se, kører en Vigenere cipher med en enkelt karakter som en
søgeord er det samme som en Cæsar cipher.
>> De samme trin gælder for Vigenere som de gjorde i Cæsar.
Nøgleordet er den anden kommandolinjen argument, så du får adgang til det med argv1.
Så har du brug for at kontrollere, at nøglen Ordet er faktisk hele alfabetisk.
Her er der, hvor er alfa kan komme i handy.
Hvis du har et gyldigt søgeord, får du den styrke fra brugeren, og derefter
er du klar til encipher.
>> Den Vigenere cipher formel er tilsvarende til kejseren formel, undtagen nu k
bliver k sænket j, angiver j-th brev af søgeordet.
Lad os gå gennem denne proces.
Sig du ønskede at sende en besked til din nedbrud, jeg kan lide dig, men du behøver ikke
ønsker alle at vide.
Så du bruger en Vigenere cipher med søgeord panda, fordi, ja, du også
gerne pandaer.
>> Det første bogstav, jeg vil blive flyttet af p, hvilket giver x, 15 bogstaver efter at jeg,
fordi 15 p er den 16. bogstav i alfabetet.
Det næste bogstav i klartekst et mellemrum, så der vil ikke blive flyttet.
Og indekset for søgeordet vil ikke ændre sig.
>> Så det næste bogstav i klartekst er l forskydes med et, der ikke skifter
klartekst brev overhovedet, fordi a er 0. bogstav i alfabetet.
Processen fortsætter, fremme søgeord karakter hver gang der er en
bogstav i almindelig tekst.
Når det sidste bogstav i søgeordet er nået, søgeordet ombrydes omkring og
skift til næste sletten tekst brev af p.
X lvne Noh.
Hvor romantisk.
>> Så givet en karakter, hvordan du konvertere at i de tilsvarende
cipher skift?
Prøv at sammenligne ASCII værdier til skift.
Måske kan du finde et forhold mellem bogstaverne og deres
alfabetisk indeks bruger ASCII matematik.
Kan du tilføje eller fratrække et tegn fra en anden for at få
dig det ønskede resultat?
>> Husk, at forskydningerne for store bogstaver og små bogstaver er de samme.
Så måske du nødt til at identificere to lignende formler til at repræsentere
skift, én for et stort nøgleordet karakter, og en
til et lille én.
>> Dernæst husk at søgeordet fremskridt kun hvis tegnet i
almindelig tekst er et bogstav, og at tilfælde af sletten
Teksten skal bevares.
Så hvis vi ser på formlen for Vigenere skift, der er to indeks
variabler, i og j.
Man holder styr på positionen i almindeligt tekst, og den anden stilling
i søgeordet.
Men din almindelig tekst kan være meget længere end dit søgeord, i hvilket tilfælde din
søgeord indeks skal ombryde omkring tilbage til begyndelsen af ​​nøgleordet.
>> Hvordan gør du det?
Lad os se tilbage på modulo operatør.
Modulo er defineret, er den resterende at dividere to tal.
Men hvad er en egentlig praktisk anvendelse af modulo?
>> Nå, siger du har en stor gruppe af mennesker, og du har brug for at opdele i
tre grupper.
En måde at opdele folk i grupper er at få dem tælle.
Du nummer grupperne gruppen nummer 1, 2, og 3..
Den første person vil sige 1, de 2 næste, de næste 3.
Den person, efter der vil sige 1, fordi der ikke er en gruppe 4, og
count starter forfra derfra.
>> Du kan bruge modulo til gøre det samme.
Denne gang vil grupperne være gruppe 0, 1 og 2.
Den første person, tal 1 modulo 3, er 1.
Person 2 modulo 3 er 2..
Person 3 modulo 3 er 0.
Person 4 modulo 3 giver 1, og så grupperne kan vikle rundt.
>> Så hvis du tager et indeks og modulo at indekset med en maksimal størrelse,
Resultatet vil aldrig være større end eller lig med størrelsen, hvilket betyder, at man
kan øge indekset meget, som du gerne vil.
Og så længe du modulo indekset med nogle tal, vil du ikke få et nummer
større end det.
Så vi har 10 mennesker i stedet for 5, og ville de alle få tildelt grupper
nummer 0, 1, eller 2.
>> Prøv at anvende dette til indpakning over nøgleord, undtagen i stedet for sortering
mennesker i gruppe numre, du ønsker indeks af søgeordet, så du kan
få den rette karakter for skift uden at overskride
længden af ​​strengen.
Med det har du din Vigenere cipher.
Mit navn er Zamyla, og dette er CS50.