1 00:00:00,000 --> 00:00:10,101 >> [Speel van musiek] 2 00:00:10,101 --> 00:00:12,700 >> ZAMYLA CHAN: Let's implementeer Vigenere, 'n bietjie meer 3 00:00:12,700 --> 00:00:14,710 verseker cipher as keiser. 4 00:00:14,710 --> 00:00:19,670 Die gewone teks word gebruik enciphered 'n string in plaas van 'n heelgetal. 5 00:00:19,670 --> 00:00:22,970 Elke letter van die alfabet in plain text geskuif word deur 'n 6 00:00:22,970 --> 00:00:24,450 brief in die navraag. 7 00:00:24,450 --> 00:00:30,860 >> In hierdie voorbeeld het die navraag ohai, O ooreenstem met 'n skof van 14; H aan 'n 8 00:00:30,860 --> 00:00:36,910 skuif van 7, A, verskuiwing van 0; en ek 'n verskuiwing van 8. 9 00:00:36,910 --> 00:00:40,710 As jy suksesvol geïmplementeer jou Caesar cipher, sal dit 'n lekker 10 00:00:40,710 --> 00:00:43,510 raamwerk waaruit jy kan implementeer Vigenere. 11 00:00:43,510 --> 00:00:47,140 Soos jy kan sien, hardloop 'n Vigenere cipher met 'n enkele karakter as 'n 12 00:00:47,140 --> 00:00:51,830 navraag is dieselfde ding as 'n keiser cipher. 13 00:00:51,830 --> 00:00:55,170 >> Dieselfde stappe van toepassing op Vigenere soos hulle gedoen het in die keiser. 14 00:00:55,170 --> 00:01:01,240 Die navraag is die tweede command line argument, sodat jy dit met argv1. 15 00:01:01,240 --> 00:01:05,400 Dan moet jy om te bevestig dat die sleutel woord is inderdaad al alfabetiese. 16 00:01:05,400 --> 00:01:09,040 Hier is waar is alfa kan handig te pas kom. 17 00:01:09,040 --> 00:01:13,550 As jy 'n geldige navraag, kry jy die sterkte van die gebruiker, en dan 18 00:01:13,550 --> 00:01:15,820 is jy gereed om te versleutelen. 19 00:01:15,820 --> 00:01:20,840 >> Die Vigenere cipher formule is soortgelyk na die keiser formule, behalwe nou k 20 00:01:20,840 --> 00:01:27,650 raak k subscript j, wat aandui die j-de letter van die navraag. 21 00:01:27,650 --> 00:01:29,640 Kom ons stap vir stap deur hierdie proses. 22 00:01:29,640 --> 00:01:34,060 Sê jy wou 'n boodskap te stuur na jou crash, ek hou van jou, maar jy doen nie 23 00:01:34,060 --> 00:01:35,190 wil almal om te weet. 24 00:01:35,190 --> 00:01:39,800 So gebruik jy 'n Vigenere cipher met die navraag Panda, want, wel, jy het ook 25 00:01:39,800 --> 00:01:41,160 hou pandas. 26 00:01:41,160 --> 00:01:47,140 >> Die eerste brief, ek sal verskuif word deur p, gee x 15 letters nadat ek, 27 00:01:47,140 --> 00:01:52,850 omdat 15 p is die 16 letter van die alfabet. 28 00:01:52,850 --> 00:01:56,750 Die volgende brief in die gewone teks is 'n ruimte, so dit sal nie verskuif word nie. 29 00:01:56,750 --> 00:02:00,420 En die indeks van die term sal nie verander nie. 30 00:02:00,420 --> 00:02:05,440 >> Toe het die volgende brief in plain text is l, verskuif word deur 'n, wat nie verskuif 31 00:02:05,440 --> 00:02:10,930 die gewone teks brief aan almal, want 'n is die 0 letter van die alfabet. 32 00:02:10,930 --> 00:02:14,980 Die proses gaan voort, die bevordering van die navraag karakter elke keer as daar 'n 33 00:02:14,980 --> 00:02:16,840 brief in die gewone teks. 34 00:02:16,840 --> 00:02:21,850 Sodra die laaste letter in die navraag is bereik, die navraag vou om en 35 00:02:21,850 --> 00:02:25,890 skuif na die volgende plain teks brief deur p. 36 00:02:25,890 --> 00:02:27,170 X lvne Noh. 37 00:02:27,170 --> 00:02:29,180 Hoe romanties. 38 00:02:29,180 --> 00:02:33,120 >> So 'n karakter gegee, hoe kan jy omskep wat in die ooreenstemmende 39 00:02:33,120 --> 00:02:34,590 becijferen verskuiwing? 40 00:02:34,590 --> 00:02:37,870 Probeer om die vergelyking van die ASCII waardes van die skof. 41 00:02:37,870 --> 00:02:41,530 Miskien kan jy 'n verhouding tussen die letters en hul 42 00:02:41,530 --> 00:02:44,550 alfabetiese indeks met behulp van ASCII wiskunde. 43 00:02:44,550 --> 00:02:48,850 Kan jy optel of aftrek een karakter van 'n ander te kry 44 00:02:48,850 --> 00:02:51,630 jy die gewenste resultaat? 45 00:02:51,630 --> 00:02:55,480 >> Onthou dat die skofte vir hoofletters en klein letters is dieselfde. 46 00:02:55,480 --> 00:02:59,510 So miskien moet jy twee te identifiseer soortgelyke formules te verteenwoordig 47 00:02:59,510 --> 00:03:03,570 verskuiwing, een vir 'n hoofletter navraag karakter, en een 48 00:03:03,570 --> 00:03:06,510 vir 'n klein een. 49 00:03:06,510 --> 00:03:10,630 >> Volgende, moet jy onthou dat die navraag vooruitgang slegs as die karakter in 50 00:03:10,630 --> 00:03:13,520 plain text is 'n brief, en dat die geval van die vlakte 51 00:03:13,520 --> 00:03:16,020 teks bewaar moet word. 52 00:03:16,020 --> 00:03:20,280 So as ons kyk na die formule vir die Vigenere skuif, is daar twee-indeks 53 00:03:20,280 --> 00:03:22,880 veranderlikes, i en j. 54 00:03:22,880 --> 00:03:26,795 Een hou van die posisie in plain teks, en die ander die posisie 55 00:03:26,795 --> 00:03:27,910 in die navraag. 56 00:03:27,910 --> 00:03:32,960 Maar jou gewone teks kan veel langer as jou navraag, in welke geval u 57 00:03:32,960 --> 00:03:38,290 navraag indeks moet om te draai om terug te aan die begin van die navraag. 58 00:03:38,290 --> 00:03:39,870 >> Hoe doen jy dit? 59 00:03:39,870 --> 00:03:43,740 Kom ons kyk weer na die modulo operateur. 60 00:03:43,740 --> 00:03:47,280 Modulo gedefinieer is die res die verdeling van twee getalle. 61 00:03:47,280 --> 00:03:50,680 Maar wat is 'n werklike praktiese gebruik van modulo? 62 00:03:50,680 --> 00:03:54,340 >> Wel, sê jy het 'n groot groep van mense, en jy hoef te verdeel in 63 00:03:54,340 --> 00:03:55,100 drie groepe. 64 00:03:55,100 --> 00:03:59,500 Een manier om mense in groepe te verdeel is om hulle te tel nie. 65 00:03:59,500 --> 00:04:03,520 Jy nommer groepe groep nommer 1, 2, en 3. 66 00:04:03,520 --> 00:04:08,510 Die eerste persoon wat sal sê 1, die volgende 2, die volgende 3. 67 00:04:08,510 --> 00:04:12,860 Die persoon wat na 1 sal sê, want daar is nie 'n groep 4, en die 68 00:04:12,860 --> 00:04:15,880 telling begin oor van daar af. 69 00:04:15,880 --> 00:04:18,209 >> Jy kan gebruik om modulo doen dieselfde ding. 70 00:04:18,209 --> 00:04:22,680 Hierdie keer het die groepe sal wees groep 0, 1 en 2. 71 00:04:22,680 --> 00:04:26,960 Die eerste persoon, getal 1 modulo 3, is 1. 72 00:04:26,960 --> 00:04:29,830 Persoon 2 modulo 3 is 2. 73 00:04:29,830 --> 00:04:32,460 Persoon 3 modulo 3 is 0. 74 00:04:32,460 --> 00:04:38,470 Persoon 4 modulo 3 gee 1, en so die groepe kan rond draai. 75 00:04:38,470 --> 00:04:44,700 >> So as jy 'n indeks en modulo dat indeks met 'n maksimum grootte, die 76 00:04:44,700 --> 00:04:49,820 gevolg sal nooit groter as of gelyk aan die grootte, wat beteken dat jy 77 00:04:49,820 --> 00:04:52,330 kan die indeks verhoog as soveel as wat jy wil. 78 00:04:52,330 --> 00:04:57,400 En so lank as wat jy modulo die indeks deur 'n nommer, sal jy nie 'n aantal 79 00:04:57,400 --> 00:04:58,510 groter as dit. 80 00:04:58,510 --> 00:05:04,500 So het ons 10 mense in plaas van 5, en hulle sou almal wat raak aan groepe 81 00:05:04,500 --> 00:05:07,480 nommer 0, 1, of 2. 82 00:05:07,480 --> 00:05:11,680 >> Probeer om dit toe te pas om te wikkel oor die navraag, behalwe in plaas van sortering 83 00:05:11,680 --> 00:05:16,050 mense in die groep nommers wat jy wil hê dat die indeks van die navraag sodat jy kan 84 00:05:16,050 --> 00:05:19,080 kry die regte karakter vir die skuif sonder meer as die 85 00:05:19,080 --> 00:05:21,836 lengte van die string. 86 00:05:21,836 --> 00:05:24,790 Met dit, het jy jou Vigenere cipher. 87 00:05:24,790 --> 00:05:27,790 My naam is Zamyla, en dit is CS50. 88 00:05:27,790 --> 00:05:32,566