1 00:00:00,000 --> 00:00:11,980 2 00:00:11,980 --> 00:00:16,980 >> ROB: Hej, jag är Rob, och låt oss dechiffrera den Vigenère programmet. 3 00:00:16,980 --> 00:00:21,180 Så första vi behöver göra är att göra Se till att användaren angett vad vi förväntat 4 00:00:21,180 --> 00:00:23,240 dem på kommandoraden. 5 00:00:23,240 --> 00:00:28,720 Så om argc är inte 2 som innebär antingen användaren har inte fyllt i strängen som vi 6 00:00:28,720 --> 00:00:31,780 vill använda som vår kryptering sträng, eller de 7 00:00:31,780 --> 00:00:32,890 in för många saker. 8 00:00:32,890 --> 00:00:35,130 Och vi vet inte vad jag ska göra med de andra saker. 9 00:00:35,130 --> 00:00:37,960 >> Så vi berätta för dem vad de borde ha angett. 10 00:00:37,960 --> 00:00:39,300 Och vi återvänder. 11 00:00:39,300 --> 00:00:44,570 Nu, om man antar att argc var 2, kan vi fortsätta med resten av programmet. 12 00:00:44,570 --> 00:00:47,890 >> Vi alias namnet argv [1] 13 00:00:47,890 --> 00:00:49,750 i variabeln nyckelordet. 14 00:00:49,750 --> 00:00:51,860 Så att vi inte behöver använda namnet argv [1] 15 00:00:51,860 --> 00:00:53,050 under resten av programmet. 16 00:00:53,050 --> 00:00:55,570 Och kanske vi ska glömma vad det betyder och så vidare. 17 00:00:55,570 --> 00:00:57,830 Nyckelord är ett mycket trevligare namn. 18 00:00:57,830 --> 00:01:01,982 Och vi kommer genast ta tag i längden av våra sökord här. 19 00:01:01,982 --> 00:01:07,460 >> OK, så nu vill vi kontrollera att våra sökord är faktiskt giltigt. 20 00:01:07,460 --> 00:01:11,250 Nyckelordet vi använder för att kryptera strängar ska bara vara alfabetisk 21 00:01:11,250 --> 00:01:12,400 tecken. 22 00:01:12,400 --> 00:01:16,830 Om användaren angett icke-alfabetisk tecken, ska vi säga, sökord 23 00:01:16,830 --> 00:01:20,170 får endast innehålla A till Z och sedan återvända. 24 00:01:20,170 --> 00:01:24,370 Så detta för slinga itererar över alla tecknen i vår sökord, kontroll 25 00:01:24,370 --> 00:01:31,870 att om man inte är bokstavs då vi måste skriva ut den varningen. 26 00:01:31,870 --> 00:01:36,285 >> Nu, när vi kommer till denna punkt, vi vet att strängen måste vara korrekt. 27 00:01:36,285 --> 00:01:38,230 Sökordet måste vara korrekt. 28 00:01:38,230 --> 00:01:40,880 Och nu måste vi få ut budskapet från användaren om att de vill att vi ska 29 00:01:40,880 --> 00:01:43,910 kryptera med den nyckelfras. 30 00:01:43,910 --> 00:01:46,780 Så för att få detta budskap, vi har en göra medan loop som kommer att 31 00:01:46,780 --> 00:01:52,650 kontinuerligt få en sträng från användaren tills de kommer in en giltig sträng. 32 00:01:52,650 --> 00:01:58,690 >> Fortsatt ser vi här denna variabel, int nun_letters_seen. 33 00:01:58,690 --> 00:02:01,300 Vi får se varför vi behöver som på en sekund. 34 00:02:01,300 --> 00:02:07,320 Men detta för slinga kommer att iterera från i är lika med 0 hela vägen upp till i. 35 00:02:07,320 --> 00:02:10,940 är lika med n, vilket betyder att vi iteration över alla möjliga 36 00:02:10,940 --> 00:02:13,020 tecken i vårt budskap. 37 00:02:13,020 --> 00:02:17,370 Eftersom vi vill kryptera alla karaktärerna i vårt budskap. 38 00:02:17,370 --> 00:02:22,970 Så märker vi göra om (isalphamessage [I], eftersom vi inte vill kryptera 39 00:02:22,970 --> 00:02:25,660 tecken som inte är alfabetisk. 40 00:02:25,660 --> 00:02:28,810 Om det finns symboler, utrymmen, eller siffror, gör vi inte 41 00:02:28,810 --> 00:02:30,730 vill kryptera dem. 42 00:02:30,730 --> 00:02:37,220 >> Nu, om man antar att det är alfabetisk, vi först vill ta reda på vad vi 43 00:02:37,220 --> 00:02:40,890 faktiskt vill kryptera meddelandet med. 44 00:02:40,890 --> 00:02:42,710 Så vad menar jag med det? 45 00:02:42,710 --> 00:02:46,740 >> Låt oss anta att den nyckelfras användaren angett var abc. 46 00:02:46,740 --> 00:02:49,070 Det är vad vi använder för att kryptera. 47 00:02:49,070 --> 00:02:54,850 Nu, naivt, tycker vi det betyder att vi vill kryptera det första tecknet 48 00:02:54,850 --> 00:02:59,740 av vårt budskap med 0, eftersom ett medel roterande karaktären av 0. 49 00:02:59,740 --> 00:03:04,395 >> Vi vill kryptera det andra tecknet med 1, tredje tecknet med 2, 50 00:03:04,395 --> 00:03:09,170 det fjärde tecknet genom 0, den femte med 1, den sjätte av 2, och så vidare. 51 00:03:09,170 --> 00:03:14,440 Men kom ihåg, att vi vill hoppa mellanslag och symboler och siffror. 52 00:03:14,440 --> 00:03:21,520 Det innebär att om användaren hade angett hallå världen som meddelandet 53 00:03:21,520 --> 00:03:26,590 att de vill kryptera, då vi vill kryptera h med 0 54 00:03:26,590 --> 00:03:32,680 svarande mot en, e med 1, den l med 2, l vid 0, o med 1. 55 00:03:32,680 --> 00:03:41,050 Vi vill hoppa över utrymmet, krypterad iw av 2, O vid 0, 1, 2, 0. 56 00:03:41,050 --> 00:03:45,250 Så märker, om vi inte hade hoppat över den utrymme, då vi skulle ha krypterat 57 00:03:45,250 --> 00:03:51,240 w med 0 och slutade med den felaktiga strängen. 58 00:03:51,240 --> 00:03:57,470 >> OK, det här är vad vi behöver variabeln num_letters_seen efter. 59 00:03:57,470 --> 00:04:04,450 Om vi ​​bara skulle kryptera med hjälp av denna metod, som inte hoppar 60 00:04:04,450 --> 00:04:09,860 symboler, mellanslag och siffror, då vi kunde bara använda variabeln i som vad 61 00:04:09,860 --> 00:04:12,540 till index i vår nyckelfras med. 62 00:04:12,540 --> 00:04:17,620 Vi behöver använda num_letters_seen att hålla spår av den faktiska platsen i 63 00:04:17,620 --> 00:04:21,146 nyckelfras som vi vill indexera. 64 00:04:21,146 --> 00:04:32,240 Så här, om sökordet vi har, om num_letter_seen mod keyword_length, så 65 00:04:32,240 --> 00:04:34,570 Varför behöver vi mod efter nyckelord längd? 66 00:04:34,570 --> 00:04:36,630 >> Tja, hallå världen var ett bra exempel. 67 00:04:36,630 --> 00:04:42,310 Om sökordet var abc, då behöver vi att kontinuerligt kryptera med en då b 68 00:04:42,310 --> 00:04:45,740 då c, sedan linda tillbaka runt, a, b, c, a, b, c. 69 00:04:45,740 --> 00:04:50,110 Så vi behöver mod efter nyckelord längd För att linda tillbaka runt. 70 00:04:50,110 --> 00:04:57,280 >> Så om detta är en stor bokstav, då vill vi att kryptera den 71 00:04:57,280 --> 00:05:01,450 ställning av denna bokstav i alfabetet, som vi får genom att bara 72 00:05:01,450 --> 00:05:06,730 subtrahera ut kapital A. Och på samma sätt, för små bokstäver, vi 73 00:05:06,730 --> 00:05:13,000 kan få nyckeln som vi vill ha med subtrahera ut gemener a. 74 00:05:13,000 --> 00:05:16,910 Så oavsett om brevet i nyckelfras var ett kapital eller 75 00:05:16,910 --> 00:05:21,640 liten bokstav, kommer vi att kryptera med samma belopp. 76 00:05:21,640 --> 00:05:28,680 >> Nu när vi har vår nyckel, ser vi här, att om budskapet i är ett versalt 77 00:05:28,680 --> 00:05:32,660 karaktär, då vill vi beräkna position i alfabetet i nämnda 78 00:05:32,660 --> 00:05:39,460 karaktär, lägga till vår nyckel till den, linda tillbaka runt så att om vi gick förbi en 79 00:05:39,460 --> 00:05:43,170 z vi går tillbaka till a, b, c, och så vidare. 80 00:05:43,170 --> 00:05:49,070 Då, äntligen, lägga tillbaka på kapital A. Så vi flytta tillbaka in i [? ASCII?] 81 00:05:49,070 --> 00:05:52,010 sortiment av dessa tecken i stället för den numerisk position i alfabetet 82 00:05:52,010 --> 00:05:53,540 av dessa tecken. 83 00:05:53,540 --> 00:05:56,610 >> Och vi gör samma sak för gemener. 84 00:05:56,610 --> 00:06:00,070 Utom vi vill subtrahera ut gemener a och lägga på den igen i 85 00:06:00,070 --> 00:06:02,900 ände, gemener en. 86 00:06:02,900 --> 00:06:08,120 Lägg märke till att num_letter_seen är endast ökas om det budskap jag var 87 00:06:08,120 --> 00:06:09,640 alfabetisk. 88 00:06:09,640 --> 00:06:15,790 Det är så vi hoppa över utrymmen, symboler, och nummer i vår nyckelfras, eftersom 89 00:06:15,790 --> 00:06:20,520 num_letter_seen är vad vi använder till index i vår sökord. 90 00:06:20,520 --> 00:06:24,540 >> Slutligen, i slutet, nu när meddelandet Jag har krypterats, vi 91 00:06:24,540 --> 00:06:26,280 skriva ut budskap i.. 92 00:06:26,280 --> 00:06:27,890 Och det är det. 93 00:06:27,890 --> 00:06:28,670 Mitt namn är Rob. 94 00:06:28,670 --> 00:06:31,020 Och detta är Vigenère. 95 00:06:31,020 --> 00:06:32,850 >> [MUSIK SPELA] 96 00:06:32,850 --> 00:06:36,651