1 00:00:00,000 --> 00:00:10,101 >> [Musik Spela] 2 00:00:10,101 --> 00:00:12,700 >> ZAMYLA CHAN: Låt oss genomföra Vigenère, en något mer 3 00:00:12,700 --> 00:00:14,710 säkra chiffer än Caesar. 4 00:00:14,710 --> 00:00:19,670 Den klartext krypterad med en sträng i stället för ett heltal. 5 00:00:19,670 --> 00:00:22,970 Varje bokstav i klartext skiftas med en 6 00:00:22,970 --> 00:00:24,450 bokstaven i nyckelordet. 7 00:00:24,450 --> 00:00:30,860 >> I detta exempel sökordet ohai, O motsvarar en förskjutning av 14, H till en 8 00:00:30,860 --> 00:00:36,910 skifta av 7, A, förskjutning av 0, och jag en förskjutning av 8. 9 00:00:36,910 --> 00:00:40,710 Om du har framgångsrikt genomfört din Caesar chiffer, det ska vara en trevlig 10 00:00:40,710 --> 00:00:43,510 ram från vilken du kan implementera Vigenère. 11 00:00:43,510 --> 00:00:47,140 Som ni kan se, kör en Vigenère chiffer med en enda karaktär som en 12 00:00:47,140 --> 00:00:51,830 nyckelordet är samma sak som Caesar chiffer. 13 00:00:51,830 --> 00:00:55,170 >> Samma steg gäller Vigenère som de gjorde i Caesar. 14 00:00:55,170 --> 00:01:01,240 Nyckelordet är den andra kommandorad argument, så du kommer åt den med argv1. 15 00:01:01,240 --> 00:01:05,400 Då måste du kontrollera att nyckeln Ordet är verkligen allt alfabetisk. 16 00:01:05,400 --> 00:01:09,040 Här är där är alpha kan komma till hands. 17 00:01:09,040 --> 00:01:13,550 Om du har ett giltigt sökord, får du styrka från användaren, och sedan 18 00:01:13,550 --> 00:01:15,820 du är redo att kryptera. 19 00:01:15,820 --> 00:01:20,840 >> Den Vigenère chiffer formeln är likartad till Caesar formel, utom nu k 20 00:01:20,840 --> 00:01:27,650 blir k nedsänkt j, som anger den j: te bokstaven i nyckelordet. 21 00:01:27,650 --> 00:01:29,640 Låt oss gå igenom denna process. 22 00:01:29,640 --> 00:01:34,060 Säg att du vill skicka ett meddelande till dig krasch, jag gillar dig, men du gör inte 23 00:01:34,060 --> 00:01:35,190 vill att alla ska veta. 24 00:01:35,190 --> 00:01:39,800 Så du använder en Vigenère chiffer med sökord panda, eftersom, ja, du också 25 00:01:39,800 --> 00:01:41,160 gillar pandas. 26 00:01:41,160 --> 00:01:47,140 >> Den första bokstaven,, jag kommer att flyttas med p, vilket ger x, 15 bokstäver efter att jag, 27 00:01:47,140 --> 00:01:52,850 eftersom 15 p är den 16: e bokstav i alfabetet. 28 00:01:52,850 --> 00:01:56,750 Nästa bokstav i klartext är ett utrymme, så att inte kommer att förskjutas. 29 00:01:56,750 --> 00:02:00,420 Och indexet för sökordet kommer inte att förändras. 30 00:02:00,420 --> 00:02:05,440 >> Sedan nästa bokstav i klartext är L, flyttas med en, vilket inte flyttas 31 00:02:05,440 --> 00:02:10,930 slätten text brev alls, eftersom a är den 0: e bokstaven i alfabetet. 32 00:02:10,930 --> 00:02:14,980 Processen fortsätter, tidigareläggning av sökord karaktär varje gång det finns en 33 00:02:14,980 --> 00:02:16,840 brev i klartext. 34 00:02:16,840 --> 00:02:21,850 När den sista bokstaven i nyckelordet är nåtts, sveper sökordet runt och 35 00:02:21,850 --> 00:02:25,890 skift till nästa slätten text brev från sid. 36 00:02:25,890 --> 00:02:27,170 X lvne noh. 37 00:02:27,170 --> 00:02:29,180 Hur romantiskt. 38 00:02:29,180 --> 00:02:33,120 >> Så med tanke på en karaktär, hur du konverterar att i motsvarande 39 00:02:33,120 --> 00:02:34,590 chiffrera skift? 40 00:02:34,590 --> 00:02:37,870 Försök jämföra ASCII värden till skiftet. 41 00:02:37,870 --> 00:02:41,530 Kanske kan du hitta en relation mellan bokstäverna och deras 42 00:02:41,530 --> 00:02:44,550 alfabetiskt register med ASCII matematik. 43 00:02:44,550 --> 00:02:48,850 Kan du lägga till eller dra ifrån ett tecken från en annan för att få 44 00:02:48,850 --> 00:02:51,630 du det önskade resultatet? 45 00:02:51,630 --> 00:02:55,480 >> Kom ihåg att de skiften för versaler och gemener är desamma. 46 00:02:55,480 --> 00:02:59,510 Så kanske du måste identifiera två liknande formler för att representera 47 00:02:59,510 --> 00:03:03,570 skift, en för ett versalt nyckelordet karaktär, och en 48 00:03:03,570 --> 00:03:06,510 för ett gement en. 49 00:03:06,510 --> 00:03:10,630 >> Nästa, kom ihåg att sökordet förskott endast om karaktären i 50 00:03:10,630 --> 00:03:13,520 klartext är en bokstav och att fallet med vanlig 51 00:03:13,520 --> 00:03:16,020 text måste bevaras. 52 00:03:16,020 --> 00:03:20,280 Så om vi tittar på formeln för Vigenère skift, det finns två index 53 00:03:20,280 --> 00:03:22,880 variabler, i och j. 54 00:03:22,880 --> 00:03:26,795 Man håller reda på positionen i klartext text, och den andra positionen 55 00:03:26,795 --> 00:03:27,910 i nyckelordet. 56 00:03:27,910 --> 00:03:32,960 Men din oformaterad text kan vara mycket längre än ditt sökord, i vilket fall ditt 57 00:03:32,960 --> 00:03:38,290 sökordsindex behöver att linda runt tillbaka till början av sökordet. 58 00:03:38,290 --> 00:03:39,870 >> Hur gör du det här? 59 00:03:39,870 --> 00:03:43,740 Låt oss titta tillbaka på modulo-operator. 60 00:03:43,740 --> 00:03:47,280 Modulo definieras är resten att dela upp två tal. 61 00:03:47,280 --> 00:03:50,680 Men vad är en faktisk praktisk användning av modulo? 62 00:03:50,680 --> 00:03:54,340 >> Tja, säg att du har en stor grupp människor, och du måste dela upp i 63 00:03:54,340 --> 00:03:55,100 tre grupper. 64 00:03:55,100 --> 00:03:59,500 Ett sätt att dela in människor i grupper är att få dem att räkna ut. 65 00:03:59,500 --> 00:04:03,520 Du numret grupperna gruppen nummer 1, 2, och 3. 66 00:04:03,520 --> 00:04:08,510 Den första personen kommer att säga 1, nästa 2, nästa 3. 67 00:04:08,510 --> 00:04:12,860 Den person efter som kommer att säga 1, eftersom det inte finns en grupp 4, och 68 00:04:12,860 --> 00:04:15,880 räkningen börjar om därifrån. 69 00:04:15,880 --> 00:04:18,209 >> Du kan använda modulo till göra samma sak. 70 00:04:18,209 --> 00:04:22,680 Den här gången, grupperna kommer vara grupp 0, 1, och 2. 71 00:04:22,680 --> 00:04:26,960 Den första personen, antal 1 modulo 3 är 1. 72 00:04:26,960 --> 00:04:29,830 Person 2 modulo 3 är 2. 73 00:04:29,830 --> 00:04:32,460 Person 3 modulo 3 är 0. 74 00:04:32,460 --> 00:04:38,470 Person 4 modulo 3 ger 1, och så grupperna kan linda runt. 75 00:04:38,470 --> 00:04:44,700 >> Så om du tar ett index och modulo som index med en maximal storlek, 76 00:04:44,700 --> 00:04:49,820 Resultatet kommer aldrig vara större än eller lika med storleken, vilket innebär att du 77 00:04:49,820 --> 00:04:52,330 kan öka index som mycket som du vill. 78 00:04:52,330 --> 00:04:57,400 Och så länge du modulo index med några nummer, kommer du inte få ett nummer 79 00:04:57,400 --> 00:04:58,510 större än så. 80 00:04:58,510 --> 00:05:04,500 Så vi har 10 personer i stället för 5, och de skulle alla få tilldelas grupper 81 00:05:04,500 --> 00:05:07,480 nummer 0, 1, eller 2. 82 00:05:07,480 --> 00:05:11,680 >> Försök att tillämpa detta på inslagning över nyckelordet, utom i stället för sortering 83 00:05:11,680 --> 00:05:16,050 folk in gruppnummer du vill index för sökordet så att du kan 84 00:05:16,050 --> 00:05:19,080 få rätt karaktär för flytta utan att överskrida 85 00:05:19,080 --> 00:05:21,836 strängens längd. 86 00:05:21,836 --> 00:05:24,790 Med detta har du din Vigenère chiffer. 87 00:05:24,790 --> 00:05:27,790 Mitt namn är Zamyla, och detta är CS50. 88 00:05:27,790 --> 00:05:32,566