1 00:00:00,000 --> 00:00:10,101 >> [Musikk spilles] 2 00:00:10,101 --> 00:00:12,700 >> ZAMYLA CHAN: La oss gjennomføre Vigenère, en noe mer 3 00:00:12,700 --> 00:00:14,710 sikre siffer enn Cæsar. 4 00:00:14,710 --> 00:00:19,670 Ren tekst er enciphered hjelp en streng i stedet for et heltall. 5 00:00:19,670 --> 00:00:22,970 Hver alfabetisk tegn i ren tekst blir forskjøvet med en 6 00:00:22,970 --> 00:00:24,450 brev i søkeordet. 7 00:00:24,450 --> 00:00:30,860 >> I dette eksempelet søkeordet ohai, O svarer til en dreining på 14, H til en 8 00:00:30,860 --> 00:00:36,910 skifte av 7, A, skift av 0, og jeg et skifte av åtte. 9 00:00:36,910 --> 00:00:40,710 Hvis du har implementert din Caesar chiffer, vil det være en fin 10 00:00:40,710 --> 00:00:43,510 rammeverk som du kan implementere Vigenère. 11 00:00:43,510 --> 00:00:47,140 Som du kan se, kjører en Vigenère siffer med en enkelt karakter som en 12 00:00:47,140 --> 00:00:51,830 søkeordet er det samme som en Cæsar siffer. 13 00:00:51,830 --> 00:00:55,170 >> De samme fremgangsmåten gjelder for Vigenère som de gjorde i Cæsar. 14 00:00:55,170 --> 00:01:01,240 Nøkkelordet er den andre kommandolinjen argument, så du tilgang til den med argv1. 15 00:01:01,240 --> 00:01:05,400 Deretter må du kontrollere at nøkkelen Ordet er faktisk alt alfabetisk. 16 00:01:05,400 --> 00:01:09,040 Her er der er alfa kan komme godt med. 17 00:01:09,040 --> 00:01:13,550 Hvis du har en gyldig søkeord, får du styrke fra brukeren, og deretter 18 00:01:13,550 --> 00:01:15,820 du er klar til å encipher. 19 00:01:15,820 --> 00:01:20,840 >> Den Vigenère siffer formelen er lik til Caesar formel, bortsett fra nå k 20 00:01:20,840 --> 00:01:27,650 blir k senket j, noe som indikerer den j-te brev av søkeordet. 21 00:01:27,650 --> 00:01:29,640 La oss gå gjennom denne prosessen. 22 00:01:29,640 --> 00:01:34,060 Fortell at du ønsket å sende en melding til krasj, jeg liker deg, men du ikke 23 00:01:34,060 --> 00:01:35,190 ønsker alle å vite. 24 00:01:35,190 --> 00:01:39,800 Så du bruker en Vigenère siffer med søkeord panda, fordi, vel, du også 25 00:01:39,800 --> 00:01:41,160 liker pandaer. 26 00:01:41,160 --> 00:01:47,140 >> Den første bokstaven, jeg vil bli flyttet av p, noe som gir x, 15 bokstaver etter at jeg, 27 00:01:47,140 --> 00:01:52,850 fordi 15 p er den 16. bokstaven i alfabetet. 28 00:01:52,850 --> 00:01:56,750 Den neste bokstaven i ren tekst er et mellomrom, slik at det ikke vil bli forskjøvet. 29 00:01:56,750 --> 00:02:00,420 Og indeksen av søkeordet vil ikke endres. 30 00:02:00,420 --> 00:02:05,440 >> Så neste bokstav i ren tekst er l, forskjøvet med en, som skifter ikke 31 00:02:05,440 --> 00:02:10,930 klartekst brev i det hele tatt, fordi a er 0th bokstav i alfabetet. 32 00:02:10,930 --> 00:02:14,980 Prosessen fortsetter, fremme søkeord karakter hver gang det er en 33 00:02:14,980 --> 00:02:16,840 brev i ren tekst. 34 00:02:16,840 --> 00:02:21,850 Når den siste bokstaven i søkeordet er nådd, wraps søkeordet rundt og 35 00:02:21,850 --> 00:02:25,890 skift til neste sletten Teksten brev av p. 36 00:02:25,890 --> 00:02:27,170 X lvne noh. 37 00:02:27,170 --> 00:02:29,180 Hvor romantisk. 38 00:02:29,180 --> 00:02:33,120 >> Så gitt en karakter, hvordan du konverterer at i det tilsvarende 39 00:02:33,120 --> 00:02:34,590 chiffer shift? 40 00:02:34,590 --> 00:02:37,870 Prøv å sammenligne ASCII Verdien til skift. 41 00:02:37,870 --> 00:02:41,530 Kanskje du kan finne et forhold mellom bokstaver og deres 42 00:02:41,530 --> 00:02:44,550 alfabetisk liste ved hjelp av ASCII matematikk. 43 00:02:44,550 --> 00:02:48,850 Kan du legge til eller trekke fra ett tegn fra hverandre for å få 44 00:02:48,850 --> 00:02:51,630 du ønsket resultat? 45 00:02:51,630 --> 00:02:55,480 >> Husk at skift for store bokstaver og små bokstaver er de samme. 46 00:02:55,480 --> 00:02:59,510 Så kanskje du trenger å identifisere to tilsvarende formler for å representere 47 00:02:59,510 --> 00:03:03,570 skift, en for en stor bokstav nøkkelord karakter, og ett 48 00:03:03,570 --> 00:03:06,510 for en små ett. 49 00:03:06,510 --> 00:03:10,630 >> Neste, husk at søkeordet fremskritt bare hvis tegnet i 50 00:03:10,630 --> 00:03:13,520 ren tekst er et brev og at Ved den vanlig 51 00:03:13,520 --> 00:03:16,020 Teksten må bevares. 52 00:03:16,020 --> 00:03:20,280 Så hvis vi ser på formelen for Vigenère skift, er det to index 53 00:03:20,280 --> 00:03:22,880 variabler, i og j. 54 00:03:22,880 --> 00:03:26,795 Man holder rede på posisjonen i ren tekst, og den andre stillingen 55 00:03:26,795 --> 00:03:27,910 i søkeordet. 56 00:03:27,910 --> 00:03:32,960 Men din ren tekst kan være mye lenger enn søkeordet ditt, i så fall din 57 00:03:32,960 --> 00:03:38,290 søkeordregisteret trenger å vikle rundt tilbake til begynnelsen av søkeordet. 58 00:03:38,290 --> 00:03:39,870 >> Hvordan gjør du dette? 59 00:03:39,870 --> 00:03:43,740 La oss se tilbake på modulo operatør. 60 00:03:43,740 --> 00:03:47,280 Modulo er definert er resten med å dele to tall. 61 00:03:47,280 --> 00:03:50,680 Men hva er en faktisk praktisk bruk av modulo? 62 00:03:50,680 --> 00:03:54,340 >> Vel, si du har en stor gruppe av mennesker, og du må dele inn 63 00:03:54,340 --> 00:03:55,100 tre gruppene. 64 00:03:55,100 --> 00:03:59,500 En måte å dele folk inn i grupper er å ha dem telle opp. 65 00:03:59,500 --> 00:04:03,520 Du antall gruppene gruppen nummer 1, 2, og 3.. 66 00:04:03,520 --> 00:04:08,510 Den første personen vil si en, de neste 2, det neste tre. 67 00:04:08,510 --> 00:04:12,860 Personen etter det vil si en, fordi det ikke er et gruppe 4, og den 68 00:04:12,860 --> 00:04:15,880 tellingen begynner på nytt derfra. 69 00:04:15,880 --> 00:04:18,209 >> Du kan bruke modulo til gjøre det samme. 70 00:04:18,209 --> 00:04:22,680 Denne gangen gruppene vil være 0, 1. og 2.. 71 00:04:22,680 --> 00:04:26,960 Den første personen, antall 1 3 modulo, er en. 72 00:04:26,960 --> 00:04:29,830 Person 2 modulo 3 er to. 73 00:04:29,830 --> 00:04:32,460 Person 3 modulo 3 er 0. 74 00:04:32,460 --> 00:04:38,470 Person 4 modulo 3 gir en, og så gruppene kan vikle seg rundt. 75 00:04:38,470 --> 00:04:44,700 >> Så hvis du tar en indeks og modulo at indeksen med en maksimal størrelse, 76 00:04:44,700 --> 00:04:49,820 Resultatet vil aldri være større enn eller lik størrelsen, noe som betyr at du 77 00:04:49,820 --> 00:04:52,330 kan øke indeksen som mye som du ønsker. 78 00:04:52,330 --> 00:04:57,400 Og så lenge du modulo indeksen med noen tall, vil du ikke få et tall 79 00:04:57,400 --> 00:04:58,510 større enn. 80 00:04:58,510 --> 00:05:04,500 Så vi har 10 personer i stedet for fem, og de ville alle bli tildelt grupper 81 00:05:04,500 --> 00:05:07,480 nummer 0, 1 eller 2. 82 00:05:07,480 --> 00:05:11,680 >> Prøv å bruke dette til å pakke over søkeord, unntatt i stedet for sortering 83 00:05:11,680 --> 00:05:16,050 folk inn i gruppen tallene du vil at indeks over søkeord, slik at du kan 84 00:05:16,050 --> 00:05:19,080 få riktig karakter for skifte uten å overskride 85 00:05:19,080 --> 00:05:21,836 lengden på strengen. 86 00:05:21,836 --> 00:05:24,790 Med det, du har din Vigenère siffer. 87 00:05:24,790 --> 00:05:27,790 Mitt navn er Zamyla, og dette er CS50. 88 00:05:27,790 --> 00:05:32,566