1 00:00:00,000 --> 00:00:11,980 2 00:00:11,980 --> 00:00:16,980 >> ROB: Hej, jeg er Rob, og lad os dechifrere den Vigenere programmet. 3 00:00:16,980 --> 00:00:21,180 Så første ting, vi skal gøre, er at gøre sikker på, at brugeren har indtastet hvad vi forventede 4 00:00:21,180 --> 00:00:23,240 dem på kommandolinjen. 5 00:00:23,240 --> 00:00:28,720 Så hvis argc ikke er 2, der betyder enten brugeren ikke indtaste strengen vi 6 00:00:28,720 --> 00:00:31,780 ønsker at bruge som vores kryptering streng, eller de 7 00:00:31,780 --> 00:00:32,890 indtastet for mange ting. 8 00:00:32,890 --> 00:00:35,130 Og vi ved ikke, hvad de skal gøre med de andre ting. 9 00:00:35,130 --> 00:00:37,960 >> Så vi fortælle dem, hvad de burde have indtastet. 10 00:00:37,960 --> 00:00:39,300 Og vi vender tilbage. 11 00:00:39,300 --> 00:00:44,570 Nu antages, at argc var 2, kan vi fortsætte med resten af ​​programmet. 12 00:00:44,570 --> 00:00:47,890 >> Vi alias navn argv [1] 13 00:00:47,890 --> 00:00:49,750 i den variable nøgleord. 14 00:00:49,750 --> 00:00:51,860 Så vi behøver ikke at bruge navnet argv [1] 15 00:00:51,860 --> 00:00:53,050 hele resten af ​​programmet. 16 00:00:53,050 --> 00:00:55,570 Og måske vil vi glemme, hvad det betyder og så videre. 17 00:00:55,570 --> 00:00:57,830 Søgeord er et meget pænere navn. 18 00:00:57,830 --> 00:01:01,982 Og vi vil straks få fat i længden af vores nøgleord lige her. 19 00:01:01,982 --> 00:01:07,460 >> OK, så nu vil vi kontrollere, at vores søgeord er faktisk gyldig. 20 00:01:07,460 --> 00:01:11,250 Nøgleordet vi bruger til at kryptere strenge skulle bare være alfabetisk 21 00:01:11,250 --> 00:01:12,400 tegn. 22 00:01:12,400 --> 00:01:16,830 Hvis brugeren har indtastet ikke-alfabetisk tegn, skal vi sige, søgeord 23 00:01:16,830 --> 00:01:20,170 må kun indeholde A gennem Z og derefter vende tilbage. 24 00:01:20,170 --> 00:01:24,370 Så dette for loop gentager over alle karakterer af vores nøgleord, kontrol 25 00:01:24,370 --> 00:01:31,870 at hvis man ikke er alfabetisk, så vi nødt til at udskrive denne advarsel. 26 00:01:31,870 --> 00:01:36,285 >> Nu, når vi kommer til dette punkt, vi kender at strengen skal være korrekte. 27 00:01:36,285 --> 00:01:38,230 Nøgleordet skal være korrekt. 28 00:01:38,230 --> 00:01:40,880 Og nu er vi nødt til at få besked fra brugeren, at de vil have os til 29 00:01:40,880 --> 00:01:43,910 kryptere med at centrale sætning. 30 00:01:43,910 --> 00:01:46,780 Så for at få den besked, vi har en gøre, mens løkke, der kommer til 31 00:01:46,780 --> 00:01:52,650 løbende får en streng fra brugeren indtil de indtaste en gyldig streng. 32 00:01:52,650 --> 00:01:58,690 >> Fortsætter, ser vi her denne variabel, int nun_letters_seen. 33 00:01:58,690 --> 00:02:01,300 Vi vil se, hvorfor vi har brug for at der i et andet. 34 00:02:01,300 --> 00:02:07,320 Men dette for loop vil gentage fra i lig 0 hele vejen op til i 35 00:02:07,320 --> 00:02:10,940 lig n, hvilket betyder, at vi iteration over alle mulige 36 00:02:10,940 --> 00:02:13,020 tegn i vores budskab. 37 00:02:13,020 --> 00:02:17,370 Fordi vi ønsker at kryptere alle karaktererne i vores budskab. 38 00:02:17,370 --> 00:02:22,970 Så opdager vi gøre, hvis (isalphamessage [I], fordi vi ikke ønsker at kryptere 39 00:02:22,970 --> 00:02:25,660 tegn, der ikke alfabetisk. 40 00:02:25,660 --> 00:02:28,810 Hvis der er symboler, Rygning forbudt, eller tal, vi ikke 41 00:02:28,810 --> 00:02:30,730 vil kryptere dem. 42 00:02:30,730 --> 00:02:37,220 >> Nu, forudsat at det er alfabetisk vi først ønsker at finde ud af, hvad vi 43 00:02:37,220 --> 00:02:40,890 faktisk ønsker at kryptere meddelelsen med. 44 00:02:40,890 --> 00:02:42,710 Så hvad mener jeg med det? 45 00:02:42,710 --> 00:02:46,740 >> Lad os antage, at den centrale sætning brugeren har indtastet var abc. 46 00:02:46,740 --> 00:02:49,070 Det er, hvad vi bruger til at kryptere. 47 00:02:49,070 --> 00:02:54,850 Nu naivt, mener vi, det betyder, at vi ønsker at kryptere det første tegn 48 00:02:54,850 --> 00:02:59,740 i vores budskab med 0, idet et middel rotere tegnet ved 0. 49 00:02:59,740 --> 00:03:04,395 >> Vi ønsker at kryptere det andet tegn med 1, tredje tegn med 2, 50 00:03:04,395 --> 00:03:09,170 det fjerde tegn med 0, den femte med 1, den sjette med 2, og så videre. 51 00:03:09,170 --> 00:03:14,440 Men husk, at vi ønsker at springe mellemrum og symboler og tal. 52 00:03:14,440 --> 00:03:21,520 Dette betyder, at hvis brugeren havde indtastet hej verden som beskeden 53 00:03:21,520 --> 00:03:26,590 at de ønsker at kryptere, så vi ønsker at kryptere h ved 0 54 00:03:26,590 --> 00:03:32,680 svarende til a, e fra 1 til l med 2, l med 0, o med 1. 55 00:03:32,680 --> 00:03:41,050 Vi ønsker at springe over den plads, krypteret w med 2, o med 0, 1, 2, 0. 56 00:03:41,050 --> 00:03:45,250 Så varsel, hvis vi ikke havde sprunget over plads, så vi ville have krypteret 57 00:03:45,250 --> 00:03:51,240 w af 0 og endte med forkert streng. 58 00:03:51,240 --> 00:03:57,470 >> OK, det er hvad vi har brug for den variable num_letters_seen for. 59 00:03:57,470 --> 00:04:04,450 Hvis vi bare skulle kryptere bruge denne metode, som ikke springe 60 00:04:04,450 --> 00:04:09,860 symboler, mellemrum og tal, så vi kunne bare bruge variablen i som hvad 61 00:04:09,860 --> 00:04:12,540 til indeks i vores centrale sætning med. 62 00:04:12,540 --> 00:04:17,620 Vi er nødt til at bruge num_letters_seen til at holde styr på de faktiske sted i 63 00:04:17,620 --> 00:04:21,146 centrale sætning, som vi ønsker at indeksere. 64 00:04:21,146 --> 00:04:32,240 Så her, hvis søgeordet vi har, hvis num_letter_seen mod keyword_length, så 65 00:04:32,240 --> 00:04:34,570 hvorfor har vi brug at mod efter søgeord længde? 66 00:04:34,570 --> 00:04:36,630 >> Nå, hej verden var et godt eksempel. 67 00:04:36,630 --> 00:04:42,310 Hvis søgeordet var abc, så har vi brug til løbende at kryptere med et så b 68 00:04:42,310 --> 00:04:45,740 derefter c, så wrap tilbage omkring, a, b, c, a, b, c. 69 00:04:45,740 --> 00:04:50,110 Så vi er nødt til at Mod af søgeord længde med henblik på at vikle tilbage omkring. 70 00:04:50,110 --> 00:04:57,280 >> Så hvis dette er et stort bogstav, så vi vil kryptere den 71 00:04:57,280 --> 00:05:01,450 position som bogstav i alfabetet, som vi får ved blot 72 00:05:01,450 --> 00:05:06,730 fratrække ud kapital A. And Tilsvarende for små bogstaver, vi 73 00:05:06,730 --> 00:05:13,000 kan få den nøgle, vi ønsker, ved fratrække ud små bogstaver a. 74 00:05:13,000 --> 00:05:16,910 Så uanset om det brev i den centrale sætning var en kapital eller 75 00:05:16,910 --> 00:05:21,640 små bogstaver, vi vil kryptere med samme beløb. 76 00:05:21,640 --> 00:05:28,680 >> Nu, hvor vi har vores nøgle, vi ser her, at hvis budskab jeg er et stort 77 00:05:28,680 --> 00:05:32,660 karakter, så vi ønsker at beregne position i alfabetet af det 78 00:05:32,660 --> 00:05:39,460 karakter, tilføje vores nøgle til det, wrap tilbage rundt, så hvis vi gik forbi en 79 00:05:39,460 --> 00:05:43,170 z vi gå tilbage til a, b, c og så videre. 80 00:05:43,170 --> 00:05:49,070 Så endelig tilføje tilbage på kapital A. Så vi flytter tilbage til [? Ascii?] 81 00:05:49,070 --> 00:05:52,010 række af disse tegn i stedet for numerisk position i alfabetet 82 00:05:52,010 --> 00:05:53,540 af disse tegn. 83 00:05:53,540 --> 00:05:56,610 >> Og vi gør det samme for små bogstaver. 84 00:05:56,610 --> 00:06:00,070 Medmindre vi ønsker at trække ud små bogstaver en og tilføje den igen i 85 00:06:00,070 --> 00:06:02,900 ende, små bogstaver et. 86 00:06:02,900 --> 00:06:08,120 Bemærk at num_letter_seen er kun øges, hvis budskab jeg var 87 00:06:08,120 --> 00:06:09,640 alfabetisk. 88 00:06:09,640 --> 00:06:15,790 Dette er, hvordan vi springe rum, symboler og numre i vores centrale sætning, da 89 00:06:15,790 --> 00:06:20,520 num_letter_seen er, hvad vi bruger til indeks i vores søgeord. 90 00:06:20,520 --> 00:06:24,540 >> Endelig, i sidste ende, nu besked Jeg er blevet krypteret, vi 91 00:06:24,540 --> 00:06:26,280 udskrive budskab jeg. 92 00:06:26,280 --> 00:06:27,890 Og det er det. 93 00:06:27,890 --> 00:06:28,670 Mit navn er Rob. 94 00:06:28,670 --> 00:06:31,020 Og det er Vigenere. 95 00:06:31,020 --> 00:06:32,850 >> [Musikgengivelse] 96 00:06:32,850 --> 00:06:36,651