1 00:00:00,000 --> 00:00:10,101 >> [MUSIC Playing] 2 00:00:10,101 --> 00:00:12,700 >> ZAMYLA CHAN: Lad os implementere Vigenere, en lidt mere 3 00:00:12,700 --> 00:00:14,710 sikre cipher end Cæsar. 4 00:00:14,710 --> 00:00:19,670 Den klartekst krypteres ved hjælp af en streng i stedet for et heltal. 5 00:00:19,670 --> 00:00:22,970 Hver bogstav i klartekst forskydes med et 6 00:00:22,970 --> 00:00:24,450 bogstav i søgeord. 7 00:00:24,450 --> 00:00:30,860 >> I dette eksempel nøgleordet ohai, O svarer til en forskydning på 14 H til en 8 00:00:30,860 --> 00:00:36,910 skift på 7; A, skift af 0, og jeg et skift på 8. 9 00:00:36,910 --> 00:00:40,710 Hvis du med held har implementeret din Caesar cipher, det vil være en god 10 00:00:40,710 --> 00:00:43,510 rammer, hvorfra du kan implementere Vigenere. 11 00:00:43,510 --> 00:00:47,140 Som du kan se, kører en Vigenere cipher med en enkelt karakter som en 12 00:00:47,140 --> 00:00:51,830 søgeord er det samme som en Cæsar cipher. 13 00:00:51,830 --> 00:00:55,170 >> De samme trin gælder for Vigenere som de gjorde i Cæsar. 14 00:00:55,170 --> 00:01:01,240 Nøgleordet er den anden kommandolinjen argument, så du får adgang til det med argv1. 15 00:01:01,240 --> 00:01:05,400 Så har du brug for at kontrollere, at nøglen Ordet er faktisk hele alfabetisk. 16 00:01:05,400 --> 00:01:09,040 Her er der, hvor er alfa kan komme i handy. 17 00:01:09,040 --> 00:01:13,550 Hvis du har et gyldigt søgeord, får du den styrke fra brugeren, og derefter 18 00:01:13,550 --> 00:01:15,820 er du klar til encipher. 19 00:01:15,820 --> 00:01:20,840 >> Den Vigenere cipher formel er tilsvarende til kejseren formel, undtagen nu k 20 00:01:20,840 --> 00:01:27,650 bliver k sænket j, angiver j-th brev af søgeordet. 21 00:01:27,650 --> 00:01:29,640 Lad os gå gennem denne proces. 22 00:01:29,640 --> 00:01:34,060 Sig du ønskede at sende en besked til din nedbrud, jeg kan lide dig, men du behøver ikke 23 00:01:34,060 --> 00:01:35,190 ønsker alle at vide. 24 00:01:35,190 --> 00:01:39,800 Så du bruger en Vigenere cipher med søgeord panda, fordi, ja, du også 25 00:01:39,800 --> 00:01:41,160 gerne pandaer. 26 00:01:41,160 --> 00:01:47,140 >> Det første bogstav, jeg vil blive flyttet af p, hvilket giver x, 15 bogstaver efter at jeg, 27 00:01:47,140 --> 00:01:52,850 fordi 15 p er den 16. bogstav i alfabetet. 28 00:01:52,850 --> 00:01:56,750 Det næste bogstav i klartekst et mellemrum, så der vil ikke blive flyttet. 29 00:01:56,750 --> 00:02:00,420 Og indekset for søgeordet vil ikke ændre sig. 30 00:02:00,420 --> 00:02:05,440 >> Så det næste bogstav i klartekst er l forskydes med et, der ikke skifter 31 00:02:05,440 --> 00:02:10,930 klartekst brev overhovedet, fordi a er 0. bogstav i alfabetet. 32 00:02:10,930 --> 00:02:14,980 Processen fortsætter, fremme søgeord karakter hver gang der er en 33 00:02:14,980 --> 00:02:16,840 bogstav i almindelig tekst. 34 00:02:16,840 --> 00:02:21,850 Når det sidste bogstav i søgeordet er nået, søgeordet ombrydes omkring og 35 00:02:21,850 --> 00:02:25,890 skift til næste sletten tekst brev af 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å givet en karakter, hvordan du konvertere at i de tilsvarende 39 00:02:33,120 --> 00:02:34,590 cipher skift? 40 00:02:34,590 --> 00:02:37,870 Prøv at sammenligne ASCII værdier til skift. 41 00:02:37,870 --> 00:02:41,530 Måske kan du finde et forhold mellem bogstaverne og deres 42 00:02:41,530 --> 00:02:44,550 alfabetisk indeks bruger ASCII matematik. 43 00:02:44,550 --> 00:02:48,850 Kan du tilføje eller fratrække et tegn fra en anden for at få 44 00:02:48,850 --> 00:02:51,630 dig det ønskede resultat? 45 00:02:51,630 --> 00:02:55,480 >> Husk, at forskydningerne for store bogstaver og små bogstaver er de samme. 46 00:02:55,480 --> 00:02:59,510 Så måske du nødt til at identificere to lignende formler til at repræsentere 47 00:02:59,510 --> 00:03:03,570 skift, én for et stort nøgleordet karakter, og en 48 00:03:03,570 --> 00:03:06,510 til et lille én. 49 00:03:06,510 --> 00:03:10,630 >> Dernæst husk at søgeordet fremskridt kun hvis tegnet i 50 00:03:10,630 --> 00:03:13,520 almindelig tekst er et bogstav, og at tilfælde af sletten 51 00:03:13,520 --> 00:03:16,020 Teksten skal bevares. 52 00:03:16,020 --> 00:03:20,280 Så hvis vi ser på formlen for Vigenere skift, der er to indeks 53 00:03:20,280 --> 00:03:22,880 variabler, i og j. 54 00:03:22,880 --> 00:03:26,795 Man holder styr på positionen i almindeligt tekst, og den anden stilling 55 00:03:26,795 --> 00:03:27,910 i søgeordet. 56 00:03:27,910 --> 00:03:32,960 Men din almindelig tekst kan være meget længere end dit søgeord, i hvilket tilfælde din 57 00:03:32,960 --> 00:03:38,290 søgeord indeks skal ombryde omkring tilbage til begyndelsen af ​​nøgleordet. 58 00:03:38,290 --> 00:03:39,870 >> Hvordan gør du det? 59 00:03:39,870 --> 00:03:43,740 Lad os se tilbage på modulo operatør. 60 00:03:43,740 --> 00:03:47,280 Modulo er defineret, er den resterende at dividere to tal. 61 00:03:47,280 --> 00:03:50,680 Men hvad er en egentlig praktisk anvendelse af modulo? 62 00:03:50,680 --> 00:03:54,340 >> Nå, siger du har en stor gruppe af mennesker, og du har brug for at opdele i 63 00:03:54,340 --> 00:03:55,100 tre grupper. 64 00:03:55,100 --> 00:03:59,500 En måde at opdele folk i grupper er at få dem tælle. 65 00:03:59,500 --> 00:04:03,520 Du nummer grupperne gruppen nummer 1, 2, og 3.. 66 00:04:03,520 --> 00:04:08,510 Den første person vil sige 1, de 2 næste, de næste 3. 67 00:04:08,510 --> 00:04:12,860 Den person, efter der vil sige 1, fordi der ikke er en gruppe 4, og 68 00:04:12,860 --> 00:04:15,880 count starter forfra derfra. 69 00:04:15,880 --> 00:04:18,209 >> Du kan bruge modulo til gøre det samme. 70 00:04:18,209 --> 00:04:22,680 Denne gang vil grupperne være gruppe 0, 1 og 2. 71 00:04:22,680 --> 00:04:26,960 Den første person, tal 1 modulo 3, er 1. 72 00:04:26,960 --> 00:04:29,830 Person 2 modulo 3 er 2.. 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 giver 1, og så grupperne kan vikle rundt. 75 00:04:38,470 --> 00:04:44,700 >> Så hvis du tager et indeks og modulo at indekset med en maksimal størrelse, 76 00:04:44,700 --> 00:04:49,820 Resultatet vil aldrig være større end eller lig med størrelsen, hvilket betyder, at man 77 00:04:49,820 --> 00:04:52,330 kan øge indekset meget, som du gerne vil. 78 00:04:52,330 --> 00:04:57,400 Og så længe du modulo indekset med nogle tal, vil du ikke få et nummer 79 00:04:57,400 --> 00:04:58,510 større end det. 80 00:04:58,510 --> 00:05:04,500 Så vi har 10 mennesker i stedet for 5, og ville de alle få 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 at anvende dette til indpakning over nøgleord, undtagen i stedet for sortering 83 00:05:11,680 --> 00:05:16,050 mennesker i gruppe numre, du ønsker indeks af søgeordet, så du kan 84 00:05:16,050 --> 00:05:19,080 få den rette karakter for skift uden at overskride 85 00:05:19,080 --> 00:05:21,836 længden af ​​strengen. 86 00:05:21,836 --> 00:05:24,790 Med det har du din Vigenere cipher. 87 00:05:24,790 --> 00:05:27,790 Mit navn er Zamyla, og dette er CS50. 88 00:05:27,790 --> 00:05:32,566