1 00:00:00,000 --> 00:00:00,930 2 00:00:00,930 --> 00:00:04,030 >> Zamyla Chan: Naj okrepi naše Igra z vigenere šifro. 3 00:00:04,030 --> 00:00:06,710 Vigenere šifra je zelo podoben cesarju, 4 00:00:06,710 --> 00:00:11,060 razen v Cezarju smo opravili v ena celo število, kot je naš ključ. 5 00:00:11,060 --> 00:00:14,100 V vigenere gremo prenesti v besedo. 6 00:00:14,100 --> 00:00:19,400 Torej, če sem hotel premik šifropisom to je CS 50, ki ga ohai, 7 00:00:19,400 --> 00:00:23,260 potem to pomeni, da vsako črko v ohai bo služila kot ključ, 8 00:00:23,260 --> 00:00:27,160 in grem s kolesom čez da je ključna beseda za mojo izmeno 9 00:00:27,160 --> 00:00:31,930 izdelavo šifropisom veliko težje dekodirati. 10 00:00:31,930 --> 00:00:34,540 >> Kaj to pomeni, da premik s ključno besedo? 11 00:00:34,540 --> 00:00:38,610 No, je ključna beseda niz kjer vsaka črka ustreza 12 00:00:38,610 --> 00:00:41,080 do neke celo število izmeno. 13 00:00:41,080 --> 00:00:49,310 Torej, o ustreza ključu 14, h na ključ 7, A ima ključ 0, 14 00:00:49,310 --> 00:00:54,670 tako da ne bi ničesar spremenilo, in potem i je ključ 8. 15 00:00:54,670 --> 00:01:00,000 >> Da sem tekel vigenere A z navadnega besedila to je CS50 dobro, 16 00:01:00,000 --> 00:01:02,800 da bi preprosto dal me nespremenjeni niz. 17 00:01:02,800 --> 00:01:08,170 Opazimo, da je to ustrezalo teče Cezarja s ključem nič. 18 00:01:08,170 --> 00:01:12,070 V bistvu, teče vigenere z vsako posamezno značaja 19 00:01:12,070 --> 00:01:17,070 bi bilo enakovredno delovanje Cezar z iste celo število. 20 00:01:17,070 --> 00:01:20,400 >> Vse je v redu, tako, saj so tako podobni, da sem 21 00:01:20,400 --> 00:01:24,300 pravzaprav priporočamo, da, če vas želim, lahko samo kopirate Caesar 22 00:01:24,300 --> 00:01:26,932 kodo v svoj vigenere kodo. 23 00:01:26,932 --> 00:01:28,640 Stvari se bodo spremenile, ampak vsaj imaš 24 00:01:28,640 --> 00:01:31,110 nekateri hrbtenico, ki jih lahko delati. 25 00:01:31,110 --> 00:01:36,410 Saj so todos enaki želimo da bi dobili ključ, dobili golo besedilo, 26 00:01:36,410 --> 00:01:40,690 Kodirani da golo besedilo, in nato natisnete to. 27 00:01:40,690 --> 00:01:44,980 >> Tako kot Cezar ključ se bo se prenese v kot drugi ukazni vrstici 28 00:01:44,980 --> 00:01:50,540 Trditev v indeksu argv 1, vendar je tokrat drugače 29 00:01:50,540 --> 00:01:52,560 ker mora biti abecednem. 30 00:01:52,560 --> 00:01:56,390 Torej, moramo ponovitev čez vse sam znak v tem ključu 31 00:01:56,390 --> 00:02:00,800 da uporabnik sprejet, in zagotoviti, da je vsak znak abecede 32 00:02:00,800 --> 00:02:02,800 da se nadaljuje. 33 00:02:02,800 --> 00:02:05,560 >> Ko smo to storili, potem smo lahko dobili niz od uporabnika, 34 00:02:05,560 --> 00:02:07,560 tako kot smo prej. 35 00:02:07,560 --> 00:02:10,520 In zdaj smo prišli do srca problema za vigenere, 36 00:02:10,520 --> 00:02:14,665 ki je prav tako kot Cezarja, kako ugotovimo Šifriranje vzorec 37 00:02:14,665 --> 00:02:19,760 in enačba, in Kodirani celoten čistim. 38 00:02:19,760 --> 00:02:23,280 >> Torej, boste opazili, da je Enačba za premik vigenere 39 00:02:23,280 --> 00:02:25,610 je zelo podoben tistemu cesarja. 40 00:02:25,610 --> 00:02:29,780 Edina razlika je v tem namesto enega samega spremenljivega k 41 00:02:29,780 --> 00:02:37,270 prej, zdaj k je podpisani indeks, kaže j črko tipke. 42 00:02:37,270 --> 00:02:39,560 >> Oglejmo si primer. 43 00:02:39,560 --> 00:02:43,830 Povejte, da ste želeli prenesti skrivnost sporočilo na svojo simpatijo, si mi všeč. 44 00:02:43,830 --> 00:02:46,325 No, za ključem, ki ste izberite nekaj, da si 45 00:02:46,325 --> 00:02:49,790 vem, crush ve, da ti je všeč, pand. 46 00:02:49,790 --> 00:02:52,290 Dobro, kako preusmeriti to? 47 00:02:52,290 --> 00:02:55,500 >> No, mi imamo navadnega indeks. 48 00:02:55,500 --> 00:02:59,160 To je na prvo črko in tako da je indeks za naš ključ 49 00:02:59,160 --> 00:03:02,830 ki je v p prva pismo v našem panda besedo. 50 00:03:02,830 --> 00:03:08,590 Torej, premikajo I s p nam x daje, potem pa pospešil čistim indeks. 51 00:03:08,590 --> 00:03:10,460 To nam pride v prostor. 52 00:03:10,460 --> 00:03:13,540 Zdaj, presledek je ne abecedni, 53 00:03:13,540 --> 00:03:16,930 tako, da pomeni, da je samo prenosi pravica več na šifropisom, 54 00:03:16,930 --> 00:03:23,430 damo prostor tam, mi pa ne vnaprej indeks za naš ključ. 55 00:03:23,430 --> 00:03:25,820 Torej, smo še vedno pri p na tej točki. 56 00:03:25,820 --> 00:03:30,130 >> Mi napreduje v naslednji Indeks v našem čistim. 57 00:03:30,130 --> 00:03:34,030 In zdaj, ker je to pismo je male črke l, 58 00:03:34,030 --> 00:03:37,920 smo premik, da z Naslednji indeks v našem ključu. 59 00:03:37,920 --> 00:03:42,360 Ki je, kar je ničla premik, tako da samo postane 60 00:03:42,360 --> 00:03:44,370 L, v našem šifriranim. 61 00:03:44,370 --> 00:03:51,120 Nato smo vnaprej tako čistim in ključni indeks, ker je po abecedi. 62 00:03:51,120 --> 00:03:56,210 Torej bomo še naprej, da dokler ne pridemo do e v kot. 63 00:03:56,210 --> 00:04:01,090 >> Vse je v redu, tako da boste opazili na to poudariti, da je glede na naše ključne indeksa, 64 00:04:01,090 --> 00:04:03,940 smo prišli do konca panda beseda, pa kaj 65 00:04:03,940 --> 00:04:08,750 se zgodi, ko pridemo do naslednjega abecedni pismo v čistim? 66 00:04:08,750 --> 00:04:12,180 No, vse, kar se zgodi, je, da smo ovijte okoli na začetek, 67 00:04:12,180 --> 00:04:14,710 na prvi indeks našega ključa. 68 00:04:14,710 --> 00:04:19,570 Torej, potem premik, da y, ki ga p, da nam n. 69 00:04:19,570 --> 00:04:26,860 In potem smo še zaključna kodiranje naša čistim priti x lvne NOH. 70 00:04:26,860 --> 00:04:29,300 >> Iz tega primera, sem so pokazali, da le vnaprej 71 00:04:29,300 --> 00:04:33,140 na naslednjo črko v ključni besedi če je znak v besedilu 72 00:04:33,140 --> 00:04:37,480 je pismo, tako da isalpha Funkcija bo prišel prav tukaj. 73 00:04:37,480 --> 00:04:43,030 In, tako kot v Caesar, želimo ohranitev primeru isupper in islower. 74 00:04:43,030 --> 00:04:46,100 Torej, dodaj malo V v vašem psevdokoda. 75 00:04:46,100 --> 00:04:48,510 >> Torej, kako ugotoviti ključne premike? 76 00:04:48,510 --> 00:04:53,030 No, če se spomnimo naše razprave o abecednih indeksi v Caesar 77 00:04:53,030 --> 00:04:55,370 problem, je zelo podobna. 78 00:04:55,370 --> 00:05:01,130 >> Kjer A ustreza ASCII vrednost 65, ampak premik 0, 79 00:05:01,130 --> 00:05:03,550 nato pa zadnja črka V abecedo, Z, 80 00:05:03,550 --> 00:05:06,940 ustreza premik od 25 let. 81 00:05:06,940 --> 00:05:10,320 Opazili boste, da je premik je enaka ali ne 82 00:05:10,320 --> 00:05:14,880 pismo je zgornji ali malimi črkami. 83 00:05:14,880 --> 00:05:17,700 >> OK, tako da zdaj, ko vas vedeti, kako ugotovimo, 84 00:05:17,700 --> 00:05:21,470 številčni premik, ki ustreza enemu značaja 85 00:05:21,470 --> 00:05:24,050 pojdimo nazaj v našo enačbo. 86 00:05:24,050 --> 00:05:28,180 Ker imamo dva različna Indeksi tukaj, i in j, 87 00:05:28,180 --> 00:05:32,130 to je namig, da želimo slediti tako naše stališče v čistim 88 00:05:32,130 --> 00:05:36,600 kot tudi naš položaj v besedo, tako tistih, ki so dve ločeni spremenljivki 89 00:05:36,600 --> 00:05:39,010 da želimo ohraniti drži. 90 00:05:39,010 --> 00:05:42,580 >> Zdaj je položaj v naši čistim se bo povečal vsakič, 91 00:05:42,580 --> 00:05:45,530 tako, da se dogaja, da je malo bolj naravnost naprej 92 00:05:45,530 --> 00:05:49,750 v nasprotju s stališčem ključne besede, ki vemo, je, da se ovije okoli, 93 00:05:49,750 --> 00:05:52,910 in včasih prirastek, Včasih ostanejo nespremenjene. 94 00:05:52,910 --> 00:05:55,430 Torej, kako izvajati funkcionalnost 95 00:05:55,430 --> 00:05:59,820 zaviti okoli indeks za ključno besedo? 96 00:05:59,820 --> 00:06:01,640 >> Bom uporabil primer štetje off. 97 00:06:01,640 --> 00:06:06,100 Štetje off je priljubljen način razdeliti ljudi v skupine. 98 00:06:06,100 --> 00:06:10,660 Da sem imel 5 ljudi in sem hotel jih razdeliti v tri skupine, 99 00:06:10,660 --> 00:06:13,640 in potem bi začeti s štetjem off. 100 00:06:13,640 --> 00:06:16,980 Prva oseba, ki bi pravijo, da sem ekipa številka ena, 101 00:06:16,980 --> 00:06:21,030 naslednja oseba bi bila ekipa številka dve, tretja oseba ekipa številka 102 00:06:21,030 --> 00:06:21,910 tri. 103 00:06:21,910 --> 00:06:25,910 Zdaj pa samo želim tri skupine, tako četrta oseba, ki bi dejansko 104 00:06:25,910 --> 00:06:30,160 začeti na začetku, in pravijo, no, jaz sem ekipa številka ena, kot tudi, 105 00:06:30,160 --> 00:06:32,890 in naslednji oseba bi moštvo številka dve. 106 00:06:32,890 --> 00:06:37,660 In od tam, jih lahko potem loči v svoji skupini. 107 00:06:37,660 --> 00:06:41,130 >> Torej, kako lahko uporabim modulo da mi pomaga izvajati 108 00:06:41,130 --> 00:06:44,160 to štetje off oklepajoča funkcijo? 109 00:06:44,160 --> 00:06:50,140 No, prva oseba številka 1, mod 3 nam daje 1. 110 00:06:50,140 --> 00:06:54,690 2 mod 3 nam daje 2, in 3 mod 3 nam daje 0. 111 00:06:54,690 --> 00:07:02,140 >> Četrta oseba, številka 4, mod 3 nam daje 1, nato pa nam 5 mod 3 je 2. 112 00:07:02,140 --> 00:07:05,370 Torej, boste opazili, da čeprav število ljudi, ki sem 113 00:07:05,370 --> 00:07:11,210 povečuje in je nad 3, ker sem jaz modding za 3 114 00:07:11,210 --> 00:07:15,250 Vedno dobim številke 0, 1 in 2. 115 00:07:15,250 --> 00:07:19,040 Nikoli nisem dobil večje od 3. 116 00:07:19,040 --> 00:07:22,630 Torej, tudi če bi imel 10 ljudi, nato pa vse od teh ljudi 117 00:07:22,630 --> 00:07:27,430 bi bila še vedno v skupini 1, 2 ali 0. 118 00:07:27,430 --> 00:07:33,560 >> Torej, zdaj vemo, da če imamo skupino 5 in smo mod vse tiste za 3, 119 00:07:33,560 --> 00:07:38,180 potem pa nikoli ne bo presega skupine 0, 1 ali 2. 120 00:07:38,180 --> 00:07:43,430 Torej, mi ne bo nikoli skupino število, ki je enako 3 ali zgoraj. 121 00:07:43,430 --> 00:07:46,980 Torej, tudi če dodam še pet ljudi, nato pa vsi od njih 122 00:07:46,980 --> 00:07:53,150 bi še vedno dodeljena skupini 0, 1 ali 2 ker sem modding s 3. 123 00:07:53,150 --> 00:07:56,510 Nikoli ne bom, da preseže to zgornjo mejo. 124 00:07:56,510 --> 00:08:00,800 >> OK, tako da vidimo, če lahko uporablja Ta koncept uporabe modulo 125 00:08:00,800 --> 00:08:03,710 zaviti okoli številke skupine in uporabiti 126 00:08:03,710 --> 00:08:08,000 , da vigenere, kjer želimo za uporabo modulo da se ovije okoli 127 00:08:08,000 --> 00:08:10,220 indeks za ključno besedo. 128 00:08:10,220 --> 00:08:12,830 Čeprav smo povečevanje indeks smo vedno 129 00:08:12,830 --> 00:08:17,260 želite zagotoviti, da smo vedno zaviti okoli samega začetka 130 00:08:17,260 --> 00:08:20,050 Nikoli prekoračitev dolžina niza. 131 00:08:20,050 --> 00:08:23,510 >> OK, tako da vem, da bi bilo malo prepričljivo. 132 00:08:23,510 --> 00:08:26,670 Tam je veliko več storiti v tem p nizu. 133 00:08:26,670 --> 00:08:30,050 Torej, se prepričajte, da ste napisali ven dobra psevdokoda zase 134 00:08:30,050 --> 00:08:32,870 da boste razumeli in da postane delo opravljeno. 135 00:08:32,870 --> 00:08:35,580 Poskusite in obravnavati vsak ena vrstica neodvisno 136 00:08:35,580 --> 00:08:38,370 ugotoviti vse malo majhne koščke sestavljanke 137 00:08:38,370 --> 00:08:40,260 preden ga dajo skupaj. 138 00:08:40,260 --> 00:08:43,110 >> Poskrbite, da boste dobili ključ v ukazni vrstici 139 00:08:43,110 --> 00:08:46,780 in zagotoviti, da je po abecedi, dobili golo besedilo od uporabnika, 140 00:08:46,780 --> 00:08:51,010 in nato v Šifriranje, poskrbite, da boste vedo, kako šifriranje z eno črko, 141 00:08:51,010 --> 00:08:56,130 nato napredujejo na celotno niz z vsemi oklepajočo funkcij. 142 00:08:56,130 --> 00:08:59,610 Končno, lahko natisnete šifropisom. 143 00:08:59,610 --> 00:09:04,050 >> Moje ime je Zamyla, in to je bilo vigenere. 144 00:09:04,050 --> 00:09:07,757