1 00:00:00,000 --> 00:00:11,980 2 00:00:11,980 --> 00:00:16,980 >> ROB: Saluton, mi estas Rob, kaj ni deĉifri la Vigenère programo. 3 00:00:16,980 --> 00:00:21,180 Do unue ni devas fari estas fari certa ke la uzanto eniris kion ni atendis 4 00:00:21,180 --> 00:00:23,240 ilin en la komandlinio. 5 00:00:23,240 --> 00:00:28,720 Do se argc ne 2 kiu signifas ĉu la uzanto ne eniris la kordo ni 6 00:00:28,720 --> 00:00:31,780 volas esti uzanta kiel nia kodi kordo, aŭ ili 7 00:00:31,780 --> 00:00:32,890 eniris tro multajn aferojn. 8 00:00:32,890 --> 00:00:35,130 Kaj ni ne scias kion fari kun tiuj aliaj aferoj. 9 00:00:35,130 --> 00:00:37,960 >> Do ni diru al ili kion ili devus esti eniris. 10 00:00:37,960 --> 00:00:39,300 Kaj ni revenas. 11 00:00:39,300 --> 00:00:44,570 Nun, supozante ke argc estis 2, ni povas daŭrigi kun la resto de la programo. 12 00:00:44,570 --> 00:00:47,890 >> Ni alias la nomo de argv [1] 13 00:00:47,890 --> 00:00:49,750 en la variablo ŝlosilvorto. 14 00:00:49,750 --> 00:00:51,860 Por ke ni ne devas uzi la nomon argv [1] 15 00:00:51,860 --> 00:00:53,050 dum la tuta resto de la programo. 16 00:00:53,050 --> 00:00:55,570 Kaj eble ni forgesas kion tio signifas, kaj tiel plu. 17 00:00:55,570 --> 00:00:57,830 Aŭtoro estas multe pli agrabla nomo. 18 00:00:57,830 --> 00:01:01,982 Kaj ni vidos tuj havigu la longo de nia ŝlosilvorto ĝuste ĉi tie. 19 00:01:01,982 --> 00:01:07,460 >> OK, do nun ni volas kontroli, ke nia ŝlosilvorto estas efektive validas. 20 00:01:07,460 --> 00:01:11,250 La ŝlosilvorto ni uzu por ĉifri kordoj devus esti simple alfabeta 21 00:01:11,250 --> 00:01:12,400 karakteroj. 22 00:01:12,400 --> 00:01:16,830 Se la uzanto eniris la ne-alfabeta karakteroj, ni dirus, ke ŝlosilvorton 23 00:01:16,830 --> 00:01:20,170 devas enhavi nur A tra Z kaj tiam revenu. 24 00:01:20,170 --> 00:01:24,370 Do tiu buklo ripetas super ĉiuj signoj de nia ŝlosilvorto, kontrolanta 25 00:01:24,370 --> 00:01:31,870 ke se oni ne estas alfabeta tiam ni bezonas presi tiun averton. 26 00:01:31,870 --> 00:01:36,285 >> Nu, iam ni atingos ĉi tiun punkton, ni scias ke kordoj devas esti ĝusta. 27 00:01:36,285 --> 00:01:38,230 La ŝlosilvorto devas esti ĝusta. 28 00:01:38,230 --> 00:01:40,880 Kaj nun ni bezonas por akiri la mesaĝon de la uzanto kiu volas nin 29 00:01:40,880 --> 00:01:43,910 ĉifri kun tiu klavo frazon. 30 00:01:43,910 --> 00:01:46,780 Do por atingi tiun mesaĝon, ni havi fari dum buklo ke tuj 31 00:01:46,780 --> 00:01:52,650 senĉese akiri kordo de la uzanto ĝis ili entajpi validan kordo. 32 00:01:52,650 --> 00:01:58,690 >> Daŭrigante, oni vidas tie ĉi variablo, int nun_letters_seen. 33 00:01:58,690 --> 00:02:01,300 Ni vidos, kial ni bezonas ke en sekundo. 34 00:02:01,300 --> 00:02:07,320 Sed tio por buklo tuj persisti de i egalas 0 tuta vojo supren al i 35 00:02:07,320 --> 00:02:10,940 egalas n, kiu signifas ni ripetanta super ĉiuj ebla 36 00:02:10,940 --> 00:02:13,020 karakteroj en nia mesaĝo. 37 00:02:13,020 --> 00:02:17,370 Ĉar ni volas kodi ĉiujn la karakteroj en nia mesaĝo. 38 00:02:17,370 --> 00:02:22,970 Do rimarki ni faru se (isalphamessage [mi], ĉar ni ne volas ĉifri 39 00:02:22,970 --> 00:02:25,660 karaktrojn kiuj ne estas alfabeta. 40 00:02:25,660 --> 00:02:28,810 Se tie estas simboloj, spacoj, aŭ nombroj, ni ne 41 00:02:28,810 --> 00:02:30,730 volas kodi tiuj. 42 00:02:30,730 --> 00:02:37,220 >> Nun, supozante, ke ĝi estas alfabeta, ni unue volas eltrovi, kion ni 43 00:02:37,220 --> 00:02:40,890 reale volas ĉifri la mesaĝon uzante. 44 00:02:40,890 --> 00:02:42,710 Do kion mi celas per tio? 45 00:02:42,710 --> 00:02:46,740 >> Supozu ke la ŝlosilo frazon la uzanto tajpis abc. 46 00:02:46,740 --> 00:02:49,070 Tio estas kion ni uzas por ĉifri. 47 00:02:49,070 --> 00:02:54,850 Nun, naive, ni opinias, ke signifas, ke ni volas kodi la unua gravulo 48 00:02:54,850 --> 00:02:59,740 de nia mesaĝo per 0, ekde duona turnanta la karaktero per 0. 49 00:02:59,740 --> 00:03:04,395 >> Ni volas kodi la duan karaktero per 1, tria karaktero per 2, 50 00:03:04,395 --> 00:03:09,170 la kvara karaktero per 0, la kvina per 1, la sesan de 2, kaj tiel plu. 51 00:03:09,170 --> 00:03:14,440 Sed memoru, ke ni volas salti spacoj kaj simboloj kaj nombroj. 52 00:03:14,440 --> 00:03:21,520 Tio signifas, ke se la uzanto jam eniris saluton mondo kiel la mesaĝon 53 00:03:21,520 --> 00:03:26,590 ke oni volas kodi, tiam ni volas kodi la h per 0 54 00:03:26,590 --> 00:03:32,680 responda al la a, la TTT per 1, La l de 2, la l per 0, la o per 1. 55 00:03:32,680 --> 00:03:41,050 Ni volas preterpasi la spaco, ĉifritajn la w de 2, la o per 0, 1, 2, 0. 56 00:03:41,050 --> 00:03:45,250 Do rimarki, se ni ne saltis la spaco, tiam ni devus esti ĉifrita 57 00:03:45,250 --> 00:03:51,240 la w per 0 kaj finis kun la malĝusta kordo. 58 00:03:51,240 --> 00:03:57,470 >> OK, tio estas, kion ni bezonas la variablo num_letters_seen por. 59 00:03:57,470 --> 00:04:04,450 Se ni simple tuj ĉifri uzante ĉi tiu metodo, kiu ne volas salti 60 00:04:04,450 --> 00:04:09,860 simboloj, spacoj, kaj nombroj, tiam ni povus simple uzi la variablo i kiel kio 61 00:04:09,860 --> 00:04:12,540 al indekso en nian klavo frazon kun. 62 00:04:12,540 --> 00:04:17,620 Ni bezonas uzi num_letters_seen teni spuro de la efektiva loko en la 63 00:04:17,620 --> 00:04:21,146 ŝlosilo frazo kiun ni volas indekso. 64 00:04:21,146 --> 00:04:32,240 Do ĉi tie, se la ŝlosilvorto ni havas, se num_letter_seen mod keyword_length, tiel 65 00:04:32,240 --> 00:04:34,570 kial ni bezonas mod per ŝlosilvorto longo? 66 00:04:34,570 --> 00:04:36,630 >> Nu, saluton mondo estis bona ekzemplo. 67 00:04:36,630 --> 00:04:42,310 Se la ŝlosilvorto estis abc, tiam ni bezonas senĉese ĉifri per tiam b 68 00:04:42,310 --> 00:04:45,740 tiam c, tiam wrap reen ĉirkaŭe, a, b, c, a, b, c. 69 00:04:45,740 --> 00:04:50,110 Do ni bezonas mod per ŝlosilvorto longo por enpaki reen ĉirkaŭe. 70 00:04:50,110 --> 00:04:57,280 >> Do se tiu estas majuskla litero, do ni volas kodi per la 71 00:04:57,280 --> 00:05:01,450 pozicio de tiu litero en la alfabeto, kiun ni ricevas per nur 72 00:05:01,450 --> 00:05:06,730 subtrahanta el ĉefurbo A. Tiam simile, por minusklaj literoj, ni 73 00:05:06,730 --> 00:05:13,000 povos atingi la sxlosilon, ke ni volas per subtrahanta el minusklaj a. 74 00:05:13,000 --> 00:05:16,910 Do sendistinge de ĉu la letero en la ŝlosilo frazon estis ĉefurbo aŭ 75 00:05:16,910 --> 00:05:21,640 minuskla litero, ni iras al ĉifri per la sama sumo. 76 00:05:21,640 --> 00:05:28,680 >> Nun ke ni havas niajn ŝlosilon, oni vidas tie, ke se mesaĝon i estas majuskle 77 00:05:28,680 --> 00:05:32,660 karaktero, tiam ni volas kalkuli la pozicio en la alfabeto de tiu 78 00:05:32,660 --> 00:05:39,460 karaktero, aldonu nia ŝlosilo al tio, enpaki reen ĉirkaŭe tiel, ke se ni iris preter 79 00:05:39,460 --> 00:05:43,170 z ni reiru al a, b, c, kaj tiel plu. 80 00:05:43,170 --> 00:05:49,070 Poste, fine, aldonu denove sur ĉefurbo A. Do ni ŝanĝi reen en la [? Ascii?] 81 00:05:49,070 --> 00:05:52,010 gamo de tiuj signoj anstataux la numera pozicio en la alfabeto 82 00:05:52,010 --> 00:05:53,540 de tiuj signoj. 83 00:05:53,540 --> 00:05:56,610 >> Kaj ni faru la samon por minuskla signoj. 84 00:05:56,610 --> 00:06:00,070 Krom ni volas subtrahi el minusklaj a kaj aldoni ĝin denove sur la 85 00:06:00,070 --> 00:06:02,900 Fine, minuskla a. 86 00:06:02,900 --> 00:06:08,120 Rimarku ke num_letter_seen estas nur incremented se mesaĝon i estis 87 00:06:08,120 --> 00:06:09,640 alfabeta. 88 00:06:09,640 --> 00:06:15,790 Jen kiel ni saltos spacoj, simboloj, kaj nombroj en niaj ŝlosilaj frazo, ekde 89 00:06:15,790 --> 00:06:20,520 num_letter_seen estas kio ni uzas al indekso en nian ŝlosilvorto. 90 00:06:20,520 --> 00:06:24,540 >> Fine, en la fino, nun tiun mesaĝon i estis ĉifrita, ni 91 00:06:24,540 --> 00:06:26,280 presi mesaĝon i. 92 00:06:26,280 --> 00:06:27,890 Kaj tio estas ĝi. 93 00:06:27,890 --> 00:06:28,670 Mia nomo estas Rob. 94 00:06:28,670 --> 00:06:31,020 Kaj jen estas Vigenère. 95 00:06:31,020 --> 00:06:32,850 >> [MUZIKO Ludanta] 96 00:06:32,850 --> 00:06:36,651