>> [Musikk spilles]
>> ZAMYLA CHAN: La oss gjennomføre Vigenère, en noe mer
sikre siffer enn Cæsar.
Ren tekst er enciphered hjelp en streng i stedet for et heltall.
Hver alfabetisk tegn i ren tekst blir forskjøvet med en
brev i søkeordet.
>> I dette eksempelet søkeordet ohai, O svarer til en dreining på 14, H til en
skifte av 7, A, skift av 0, og jeg et skifte av åtte.
Hvis du har implementert din Caesar chiffer, vil det være en fin
rammeverk som du kan implementere Vigenère.
Som du kan se, kjører en Vigenère siffer med en enkelt karakter som en
søkeordet er det samme som en Cæsar siffer.
>> De samme fremgangsmåten gjelder for Vigenère som de gjorde i Cæsar.
Nøkkelordet er den andre kommandolinjen argument, så du tilgang til den med argv1.
Deretter må du kontrollere at nøkkelen Ordet er faktisk alt alfabetisk.
Her er der er alfa kan komme godt med.
Hvis du har en gyldig søkeord, får du styrke fra brukeren, og deretter
du er klar til å encipher.
>> Den Vigenère siffer formelen er lik til Caesar formel, bortsett fra nå k
blir k senket j, noe som indikerer den j-te brev av søkeordet.
La oss gå gjennom denne prosessen.
Fortell at du ønsket å sende en melding til krasj, jeg liker deg, men du ikke
ønsker alle å vite.
Så du bruker en Vigenère siffer med søkeord panda, fordi, vel, du også
liker pandaer.
>> Den første bokstaven, jeg vil bli flyttet av p, noe som gir x, 15 bokstaver etter at jeg,
fordi 15 p er den 16. bokstaven i alfabetet.
Den neste bokstaven i ren tekst er et mellomrom, slik at det ikke vil bli forskjøvet.
Og indeksen av søkeordet vil ikke endres.
>> Så neste bokstav i ren tekst er l, forskjøvet med en, som skifter ikke
klartekst brev i det hele tatt, fordi a er 0th bokstav i alfabetet.
Prosessen fortsetter, fremme søkeord karakter hver gang det er en
brev i ren tekst.
Når den siste bokstaven i søkeordet er nådd, wraps søkeordet rundt og
skift til neste sletten Teksten brev av p.
X lvne noh.
Hvor romantisk.
>> Så gitt en karakter, hvordan du konverterer at i det tilsvarende
chiffer shift?
Prøv å sammenligne ASCII Verdien til skift.
Kanskje du kan finne et forhold mellom bokstaver og deres
alfabetisk liste ved hjelp av ASCII matematikk.
Kan du legge til eller trekke fra ett tegn fra hverandre for å få
du ønsket resultat?
>> Husk at skift for store bokstaver og små bokstaver er de samme.
Så kanskje du trenger å identifisere to tilsvarende formler for å representere
skift, en for en stor bokstav nøkkelord karakter, og ett
for en små ett.
>> Neste, husk at søkeordet fremskritt bare hvis tegnet i
ren tekst er et brev og at Ved den vanlig
Teksten må bevares.
Så hvis vi ser på formelen for Vigenère skift, er det to index
variabler, i og j.
Man holder rede på posisjonen i ren tekst, og den andre stillingen
i søkeordet.
Men din ren tekst kan være mye lenger enn søkeordet ditt, i så fall din
søkeordregisteret trenger å vikle rundt tilbake til begynnelsen av søkeordet.
>> Hvordan gjør du dette?
La oss se tilbake på modulo operatør.
Modulo er definert er resten med å dele to tall.
Men hva er en faktisk praktisk bruk av modulo?
>> Vel, si du har en stor gruppe av mennesker, og du må dele inn
tre gruppene.
En måte å dele folk inn i grupper er å ha dem telle opp.
Du antall gruppene gruppen nummer 1, 2, og 3..
Den første personen vil si en, de neste 2, det neste tre.
Personen etter det vil si en, fordi det ikke er et gruppe 4, og den
tellingen begynner på nytt derfra.
>> Du kan bruke modulo til gjøre det samme.
Denne gangen gruppene vil være 0, 1. og 2..
Den første personen, antall 1 3 modulo, er en.
Person 2 modulo 3 er to.
Person 3 modulo 3 er 0.
Person 4 modulo 3 gir en, og så gruppene kan vikle seg rundt.
>> Så hvis du tar en indeks og modulo at indeksen med en maksimal størrelse,
Resultatet vil aldri være større enn eller lik størrelsen, noe som betyr at du
kan øke indeksen som mye som du ønsker.
Og så lenge du modulo indeksen med noen tall, vil du ikke få et tall
større enn.
Så vi har 10 personer i stedet for fem, og de ville alle bli tildelt grupper
nummer 0, 1 eller 2.
>> Prøv å bruke dette til å pakke over søkeord, unntatt i stedet for sortering
folk inn i gruppen tallene du vil at indeks over søkeord, slik at du kan
få riktig karakter for skifte uten å overskride
lengden på strengen.
Med det, du har din Vigenère siffer.
Mitt navn er Zamyla, og dette er CS50.