1 00:00:00,000 --> 00:00:00,930 2 00:00:00,930 --> 00:00:04,030 >> Zamyla Chan: Kom ons stap ons spel met die vigenere cipher. 3 00:00:04,030 --> 00:00:06,710 Die vigenere cipher is baie soortgelyk aan die keiser, 4 00:00:06,710 --> 00:00:11,060 behalwe in die keiser geslaag ons in 'n enkele heelgetal as ons belangrikste. 5 00:00:11,060 --> 00:00:14,100 In vigenere ons gaan En in 'n navraag. 6 00:00:14,100 --> 00:00:19,400 Dus, as ek wou die skuif kriptoteks dit CS 50 deur ohai, 7 00:00:19,400 --> 00:00:23,260 dan beteken dit dat elke letter in ohai gaan dien as die sleutel, 8 00:00:23,260 --> 00:00:27,160 en ek gaan siklus die navraag vir my skof 9 00:00:27,160 --> 00:00:31,930 maak die kriptoteks 'n veel moeiliker om te ontsyfer. 10 00:00:31,930 --> 00:00:34,540 >> Wat beteken dit om skuif deur die navraag? 11 00:00:34,540 --> 00:00:38,610 Wel, die navraag is 'n string waar elke brief ooreenstem 12 00:00:38,610 --> 00:00:41,080 'n paar heelgetal verskuiwing. 13 00:00:41,080 --> 00:00:49,310 So, die o ooreenstem met 'n sleutel van 14, h 'n sleutel van 7, 'n het 'n sleutel van 0, 14 00:00:49,310 --> 00:00:54,670 sodat sal niks verander nie, en dan het ek 'n sleutel van 8. 15 00:00:54,670 --> 00:01:00,000 >> Ek sê gehardloop vigenere A by die plain text dit is CS50 goed, 16 00:01:00,000 --> 00:01:02,800 wat sou eenvoudig gee my 'n onveranderde string. 17 00:01:02,800 --> 00:01:08,170 Let daarop dat hierdie is gelykstaande aan hardloop Caesar met 'n sleutel van nul. 18 00:01:08,170 --> 00:01:12,070 Trouens, hardloop vigenere met 'n enkele karakter 19 00:01:12,070 --> 00:01:17,070 gelykstaande aan loop sou wees Caesar met daardie selfde heelgetal. 20 00:01:17,070 --> 00:01:20,400 >> Goed, so, want hulle is so soortgelyk Ek wil 21 00:01:20,400 --> 00:01:24,300 eintlik beveel aan dat as jy wil kan jy net jou Caesar kopieer 22 00:01:24,300 --> 00:01:26,932 kode in jou vigenere kode. 23 00:01:26,932 --> 00:01:28,640 Dinge sal verander, maar ten minste het jy 24 00:01:28,640 --> 00:01:31,110 sommige ruggraat wat jy kan werk. 25 00:01:31,110 --> 00:01:36,410 Omdat die Todos is dieselfde wat ons wil om die sleutel te kry, kry die gewone teks, 26 00:01:36,410 --> 00:01:40,690 versleutelen dat gewone teks, en dan druk wat uit. 27 00:01:40,690 --> 00:01:44,980 >> Net soos die keiser die sleutel gaan geslaag word as die tweede command line 28 00:01:44,980 --> 00:01:50,540 argument vervat in argv indeks 1, maar dit is verskillende hierdie tyd 29 00:01:50,540 --> 00:01:52,560 want dit moet alfabeties wees. 30 00:01:52,560 --> 00:01:56,390 So, moet ons oor Itereer elke enkele karakter in daardie sleutel 31 00:01:56,390 --> 00:02:00,800 dat die gebruiker geslaag, en verseker dat elke karakter is alfabetiese 32 00:02:00,800 --> 00:02:02,800 om voort te gaan. 33 00:02:02,800 --> 00:02:05,560 >> Sodra ons dit gedoen het, dan moet ons kan die string te kry van die gebruiker, 34 00:02:05,560 --> 00:02:07,560 net soos ons gedoen het voor. 35 00:02:07,560 --> 00:02:10,520 En nou, kom ons by die hart van die probleem vir vigenere, 36 00:02:10,520 --> 00:02:14,665 wat net soos die keiser, hoe om uit te vind die geheimschrift patroon 37 00:02:14,665 --> 00:02:19,760 en vergelyking, en versleutelen die hele plat. 38 00:02:19,760 --> 00:02:23,280 >> So, sal jy sien dat die vergelyking vir die vigenere verskuiwing 39 00:02:23,280 --> 00:02:25,610 is baie soortgelyk aan die keiser een. 40 00:02:25,610 --> 00:02:29,780 Die enigste verskil is dat in plaas van 'n enkele veranderlike k 41 00:02:29,780 --> 00:02:37,270 voor, nou k het 'n onderskrif, dui die JTH letter van die sleutel. 42 00:02:37,270 --> 00:02:39,560 >> Kom ons loop deur 'n voorbeeld. 43 00:02:39,560 --> 00:02:43,830 Sê jy wou 'n geheime slaag boodskap op jou geliefde, ek hou van jou. 44 00:02:43,830 --> 00:02:46,325 Wel, vir jou sleutel jy kies iets wat jou 45 00:02:46,325 --> 00:02:49,790 weet geliefdes weet wat jy wil, pandas. 46 00:02:49,790 --> 00:02:52,290 Goed, so hoe kan ons hierdie skuif? 47 00:02:52,290 --> 00:02:55,500 >> Wel, ons het ons skoonteks-indeks. 48 00:02:55,500 --> 00:02:59,160 Dit is op die eerste letter en so is die indeks vir ons sleutel 49 00:02:59,160 --> 00:03:02,830 wat by die p, die eerste brief in ons Panda woord. 50 00:03:02,830 --> 00:03:08,590 So, die verskuiwing ek deur p gee ons x, dan bevorder ons die skoonteks-indeks. 51 00:03:08,590 --> 00:03:10,460 Dit kry ons 'n ruimte. 52 00:03:10,460 --> 00:03:13,540 Nou, die ruimte karakter is nie alfabetiese, 53 00:03:13,540 --> 00:03:16,930 so dit beteken dat, wat net oordrag reg oor die kriptoteks, 54 00:03:16,930 --> 00:03:23,430 Ons laat 'n plek daar, en ons doen nie bevorder die indeks vir ons sleutel. 55 00:03:23,430 --> 00:03:25,820 So, ons is nog steeds op p op hierdie punt. 56 00:03:25,820 --> 00:03:30,130 >> Ons bevorder na die volgende indeks in ons plat. 57 00:03:30,130 --> 00:03:34,030 En nou, want dit is 'n brief, die klein l, 58 00:03:34,030 --> 00:03:37,920 Ons skuif wat deur die volgende indeks in ons sleutel. 59 00:03:37,920 --> 00:03:42,360 Dit is 'n wat 'n nul verskuiwing sodat net raak 60 00:03:42,360 --> 00:03:44,370 'n l in ons kriptoteks. 61 00:03:44,370 --> 00:03:51,120 Dan, te bevorder ons albei die skoonteks, en die hoofindeks want dis alfabetiese. 62 00:03:51,120 --> 00:03:56,210 So dan gaan ons voort wat totdat ons by die e in dies meer. 63 00:03:56,210 --> 00:04:01,090 >> Goed, so jy sal sien in hierdie wys dat, in terme van ons belangrikste indeks, 64 00:04:01,090 --> 00:04:03,940 Ons het die einde van bereik die panda woord, so what 65 00:04:03,940 --> 00:04:08,750 gebeur wanneer ons by die volgende alfabetiese letter in die plat? 66 00:04:08,750 --> 00:04:12,180 Wel, al wat gebeur is ons draai om na die begin, 67 00:04:12,180 --> 00:04:14,710 om die eerste indeks van ons sleutel. 68 00:04:14,710 --> 00:04:19,570 So, dan skuif ons dat y deur p aan ons N gee. 69 00:04:19,570 --> 00:04:26,860 En dan, gaan ons voort afwerking enkodering ons skoonteks na x lvne Noh kry. 70 00:04:26,860 --> 00:04:29,300 >> Uit hierdie voorbeeld, ek het getoon dat ons net vooraf 71 00:04:29,300 --> 00:04:33,140 na die volgende brief in die navraag As die karakter in plain text 72 00:04:33,140 --> 00:04:37,480 is 'n brief so die isalpha funksie sal handig te pas kom hier. 73 00:04:37,480 --> 00:04:43,030 En, net soos in die keiser, wil ons die behoud van die geval, isupper en islower. 74 00:04:43,030 --> 00:04:46,100 So, voeg dit bietjie in in jou pseudokode. 75 00:04:46,100 --> 00:04:48,510 >> So hoe kan ons uitvind die sleutel skofte? 76 00:04:48,510 --> 00:04:53,030 Wel, as jy onthou ons gesprek op alfabetiese indekse in die keiser 77 00:04:53,030 --> 00:04:55,370 probleem, dit is baie soortgelyk. 78 00:04:55,370 --> 00:05:01,130 >> Waar 'n stem ooreen met 'n ASCII waarde van 65, maar 'n verskuiwing van 0, 79 00:05:01,130 --> 00:05:03,550 en dan die laaste brief in die alfabet, Z, 80 00:05:03,550 --> 00:05:06,940 stem ooreen met 'n verskuiwing van 25. 81 00:05:06,940 --> 00:05:10,320 Jy sal sien dat die verskuiwing identies of 82 00:05:10,320 --> 00:05:14,880 die brief is hoofletters of kleinletters. 83 00:05:14,880 --> 00:05:17,700 >> OK, so nou dat jy weet hoe om uit te vind 84 00:05:17,700 --> 00:05:21,470 die numeriese verskuiwing wat stem ooreen met 'n enkele karakter 85 00:05:21,470 --> 00:05:24,050 Kom ons gaan terug na ons vergelyking. 86 00:05:24,050 --> 00:05:28,180 Want ons het twee verskillende onderskrifte hier, I en J, 87 00:05:28,180 --> 00:05:32,130 dit is 'n aanduiding dat ons wil om tred te hou van beide ons posisie in die skoonteks 88 00:05:32,130 --> 00:05:36,600 asook ons ​​posisie in die navraag, so dit is twee aparte veranderlikes 89 00:05:36,600 --> 00:05:39,010 dat ons wil 'n greep van hou. 90 00:05:39,010 --> 00:05:42,580 >> Nou, die posisie in ons skoonteks gaan elke keer te verhoog, 91 00:05:42,580 --> 00:05:45,530 sodat gaan 'n wees bietjie meer reguit vorentoe 92 00:05:45,530 --> 00:05:49,750 in teenstelling met die posisie van die term, wat ons weet het om rond te draai, 93 00:05:49,750 --> 00:05:52,910 en soms inkrementeer, soms dieselfde bly. 94 00:05:52,910 --> 00:05:55,430 So, hoe kan ons implementeer die funksie 95 00:05:55,430 --> 00:05:59,820 om te draai rondom die indeks vir die navraag? 96 00:05:59,820 --> 00:06:01,640 >> Ek gaan die tel af voorbeeld gebruik. 97 00:06:01,640 --> 00:06:06,100 Tel af is 'n gewilde manier om mense in groepe verdeel. 98 00:06:06,100 --> 00:06:10,660 Ek sê gehad 5 mense en ek wou verdeel hulle in drie groepe, 99 00:06:10,660 --> 00:06:13,640 goed dan sou ek begin deur te tel af. 100 00:06:13,640 --> 00:06:16,980 Die eerste persoon sou sê ek is span nommer een, 101 00:06:16,980 --> 00:06:21,030 die volgende persoon sou span getal wees twee, die derde persoon span aantal 102 00:06:21,030 --> 00:06:21,910 drie. 103 00:06:21,910 --> 00:06:25,910 Nou wil ek net drie groepe so die vierde persoon sou eintlik 104 00:06:25,910 --> 00:06:30,160 begin by die begin en sê: Wel, ek is span nommer een so goed, 105 00:06:30,160 --> 00:06:32,890 en die volgende persoon sou span nommer twee wees. 106 00:06:32,890 --> 00:06:37,660 En van daar af, kan hulle dan skei in hulle groepe. 107 00:06:37,660 --> 00:06:41,130 >> So, hoe kan ek gebruik modulo om my te help implementeer 108 00:06:41,130 --> 00:06:44,160 hierdie tel af wrap rondom funksie? 109 00:06:44,160 --> 00:06:50,140 Wel, die eerste persoon nommer 1, mod 3 gee ons 1. 110 00:06:50,140 --> 00:06:54,690 2 mod 3 gee ons 2, en 3 mod 3 gee ons 0. 111 00:06:54,690 --> 00:07:02,140 >> Die vierde persoon, nommer 4, mod 3 gee ons 1, en dan 5 mod 3 gee ons 2. 112 00:07:02,140 --> 00:07:05,370 So, sal jy agterkom dat alhoewel die aantal mense wat ek het 113 00:07:05,370 --> 00:07:11,210 verhoog, en bo 3, aangesien ek modding deur 3 114 00:07:11,210 --> 00:07:15,250 Ek kry altyd getalle 0, 1, en 2. 115 00:07:15,250 --> 00:07:19,040 Ek het nog nooit kry groter as 3. 116 00:07:19,040 --> 00:07:22,630 So dan, selfs al het ek 10 mense, dan is almal van die mense 117 00:07:22,630 --> 00:07:27,430 sou nog wees binne groepe 1, 2, of 0. 118 00:07:27,430 --> 00:07:33,560 >> So, nou weet ons dat as ons 'n groep van 5 en ons mod al daardie deur 3, 119 00:07:33,560 --> 00:07:38,180 dan is ons nooit gaan oorskry groepe 0, 1, of 2. 120 00:07:38,180 --> 00:07:43,430 So, ons nooit gaan 'n groep te kry aantal dis gelyk aan 3 of hoër. 121 00:07:43,430 --> 00:07:46,980 So, selfs as ek voeg nog vyf mense, dan is almal van hulle 122 00:07:46,980 --> 00:07:53,150 steeds sal word aan groepe 0, 1, of 2 want ek modding deur 3. 123 00:07:53,150 --> 00:07:56,510 Ek is nooit gaan dat cap oorskry. 124 00:07:56,510 --> 00:08:00,800 >> OK, so laat ons kyk of ons kan aansoek doen hierdie konsep van die gebruik modulo 125 00:08:00,800 --> 00:08:03,710 om te draai rondom die groep getalle en toe te pas 126 00:08:03,710 --> 00:08:08,000 dit vigenere waar ons wil om modulo gebruik om rond te draai 127 00:08:08,000 --> 00:08:10,220 die indeks vir die navraag. 128 00:08:10,220 --> 00:08:12,830 Selfs al is ons die verhoog die indeks het ons altyd 129 00:08:12,830 --> 00:08:17,260 wil om seker te maak dat ons altyd draai om na die begin 130 00:08:17,260 --> 00:08:20,050 nooit meer as die lengte van die string. 131 00:08:20,050 --> 00:08:23,510 >> OK, so ek weet dit kan wees 'n bietjie oorweldigend. 132 00:08:23,510 --> 00:08:26,670 Daar is 'n baie meer om te doen in hierdie p stel. 133 00:08:26,670 --> 00:08:30,050 So, maak seker dat jy skryf 'n goeie pseudokode vir jouself 134 00:08:30,050 --> 00:08:32,870 dat jy verstaan ​​en wat kry die werk gedoen. 135 00:08:32,870 --> 00:08:35,580 Probeer en spreek elke enkele lyn onafhanklik 136 00:08:35,580 --> 00:08:38,370 uitzoeken al die klein klein stukkies van die legkaart 137 00:08:38,370 --> 00:08:40,260 voordat die samestelling daarvan. 138 00:08:40,260 --> 00:08:43,110 >> Maak seker dat jy kan kry die sleutel uit die opdrag lyn 139 00:08:43,110 --> 00:08:46,780 en verseker dat dit alfabetiese, kry die gewone teks van die gebruiker, 140 00:08:46,780 --> 00:08:51,010 en dan in geheimschrift, maak seker dat jy weet hoe om 'n enkele brief versleutelen, 141 00:08:51,010 --> 00:08:56,130 en dan vorder na die hele string met al die wrap rondom funksies. 142 00:08:56,130 --> 00:08:59,610 Ten slotte, kan jy die kriptoteks druk. 143 00:08:59,610 --> 00:09:04,050 >> My naam is 'n Zamyla, en dit was vigenere. 144 00:09:04,050 --> 00:09:07,757