[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.