1 00:00:00,000 --> 00:00:00,930 2 00:00:00,930 --> 00:00:04,030 >> Zamyla Chan: Anem a intensificar els nostres joc amb el xifrat Vigenère. 3 00:00:04,030 --> 00:00:06,710 El xifrat Vigenère és molt similar al Cèsar, 4 00:00:06,710 --> 00:00:11,060 excepte en Caesar passem a un sol número sencer com la clau. 5 00:00:11,060 --> 00:00:14,100 En Vigenère anem per passar d'una paraula clau. 6 00:00:14,100 --> 00:00:19,400 Així que, si volia canviar el text xifrat és CS 50 per ohai, 7 00:00:19,400 --> 00:00:23,260 llavors això vol dir que cada lletra en ohai va servir com la clau, 8 00:00:23,260 --> 00:00:27,160 i jo vaig al llarg del cicle aquesta paraula clau per el meu torn 9 00:00:27,160 --> 00:00:31,930 fer que el text xifrat molt més difícil de desxifrar. 10 00:00:31,930 --> 00:00:34,540 >> Què significa per a canviar per la paraula clau? 11 00:00:34,540 --> 00:00:38,610 Bé, la paraula clau és una cadena en el qual cada lletra correspon 12 00:00:38,610 --> 00:00:41,080 a algun canvi de número sencer. 13 00:00:41,080 --> 00:00:49,310 Per tant, l'o correspon a una clau de 14, h a una tecla de 7, a té una clau de 0, 14 00:00:49,310 --> 00:00:54,670 de manera que no canviaria res, i després i té una clau de 8. 15 00:00:54,670 --> 00:01:00,000 >> Dir que em vaig trobar Vigenère A amb el text pla això és així CS50, 16 00:01:00,000 --> 00:01:02,800 això seria simplement donar em una cadena sense canvis. 17 00:01:02,800 --> 00:01:08,170 Observi que això és equivalent a César corrent amb una clau de zero. 18 00:01:08,170 --> 00:01:12,070 De fet, s'executa Vigenère amb qualsevol caràcter individual 19 00:01:12,070 --> 00:01:17,070 seria equivalent a córrer César amb el mateix nombre sencer. 20 00:01:17,070 --> 00:01:20,400 >> Molt bé, pel que, des que són tan similars que havia 21 00:01:20,400 --> 00:01:24,300 realment recomano que si volen que vostè pot copiar el seu Caesar 22 00:01:24,300 --> 00:01:26,932 codi en el codi Vigenère. 23 00:01:26,932 --> 00:01:28,640 Les coses canviaran, però almenys vostè té 24 00:01:28,640 --> 00:01:31,110 alguns columna vertebral que es pot treballar amb ells. 25 00:01:31,110 --> 00:01:36,410 A causa que el Tots són els mateixos que volem per obtenir la clau, obtenir el text pla, 26 00:01:36,410 --> 00:01:40,690 encipher que el text sense format, i després imprimir això. 27 00:01:40,690 --> 00:01:44,980 >> Igual que Cèsar, la clau va a s'ha passat com la segona línia d'ordres 28 00:01:44,980 --> 00:01:50,540 argumentació continguda en l'índex de argv 1, però aquest cop és diferent 29 00:01:50,540 --> 00:01:52,560 perquè ha de ser alfabètic. 30 00:01:52,560 --> 00:01:56,390 Per tant, hem de iterar sobre cada caràcter únic en aquesta tecla 31 00:01:56,390 --> 00:02:00,800 que l'usuari va passar a, i assegurar que cada caràcter és alfabètic 32 00:02:00,800 --> 00:02:02,800 per tal de continuar. 33 00:02:02,800 --> 00:02:05,560 >> Un cop hem fet això, llavors tenim pot obtenir la cadena de l'usuari, 34 00:02:05,560 --> 00:02:07,560 tal com ho vam fer abans. 35 00:02:07,560 --> 00:02:10,520 I ara, arribem al cor del problema per Vigenère, 36 00:02:10,520 --> 00:02:14,665 que és igual que César, com esbrinar el patró de xifrat 37 00:02:14,665 --> 00:02:19,760 i l'equació, i encipher tot el text en clar. 38 00:02:19,760 --> 00:02:23,280 >> Per tant, s'adonarà que la equació per al canvi Vigenère 39 00:02:23,280 --> 00:02:25,610 és molt similar a la de César. 40 00:02:25,610 --> 00:02:29,780 L'única diferència és que en lloc d'una sola variable k 41 00:02:29,780 --> 00:02:37,270 abans, ara k té un subíndex, que indica la lletra j-èsima de la clau. 42 00:02:37,270 --> 00:02:39,560 >> Anem a caminar a través d'un exemple. 43 00:02:39,560 --> 00:02:43,830 Digues que vols passar un secret missatge en el seu aixafament, m'agrada vostè. 44 00:02:43,830 --> 00:02:46,325 Bé, perquè la seva clau triar una cosa que la seva 45 00:02:46,325 --> 00:02:49,790 saber aixafament sap que li agrada, pandes. 46 00:02:49,790 --> 00:02:52,290 Molt bé, així que com canviem això? 47 00:02:52,290 --> 00:02:55,500 >> Bé, tenim el nostre índex de text pla. 48 00:02:55,500 --> 00:02:59,160 Això és a la primera lletra i pel que és l'índex de la clau 49 00:02:59,160 --> 00:03:02,830 que es troba a la p, la primera lletra a la nostra paraula colla. 50 00:03:02,830 --> 00:03:08,590 Per tant, el canvi que per p ens dóna x, a continuació, s'avança l'índex de text pla. 51 00:03:08,590 --> 00:03:10,460 Això ens porta a un espai. 52 00:03:10,460 --> 00:03:13,540 Ara, el caràcter d'espai no és alfabètic, 53 00:03:13,540 --> 00:03:16,930 el que significa que, que acaba transferències a dreta sobre el text xifrat, 54 00:03:16,930 --> 00:03:23,430 posem un espai allà, i no ho fem avançar en l'índex de la clau. 55 00:03:23,430 --> 00:03:25,820 Per tant, encara estem en p en aquest punt. 56 00:03:25,820 --> 00:03:30,130 >> S'avança a la següent índex en el nostre text pla. 57 00:03:30,130 --> 00:03:34,030 I ara, ja que és una carta, la l minúscula, 58 00:03:34,030 --> 00:03:37,920 ens desplacem per la qual índex següent a la clau. 59 00:03:37,920 --> 00:03:42,360 La qual cosa és una, que és un zero desplaçament de manera que només es converteix 60 00:03:42,360 --> 00:03:44,370 un l en el nostre text xifrat. 61 00:03:44,370 --> 00:03:51,120 A continuació, s'avança tant el text en clar, i l'índex de clau perquè és alfabètic. 62 00:03:51,120 --> 00:03:56,210 Així que després continuem fins arribar a la direcció de similars. 63 00:03:56,210 --> 00:04:01,090 >> Molt bé, pel que es donarà compte en aquest assenyalar que, en termes de l'índex de clau, 64 00:04:01,090 --> 00:04:03,940 hem arribat al final de la paraula colla, així que el 65 00:04:03,940 --> 00:04:08,750 que succeeix quan s'arriba a la següent lletra de l'alfabet en el text en clar? 66 00:04:08,750 --> 00:04:12,180 Bé, tot el que succeeix és que embolicar al voltant de al principi, 67 00:04:12,180 --> 00:04:14,710 per al primer índex de la clau. 68 00:04:14,710 --> 00:04:19,570 Per tant, a continuació, ens desplacem que I per p per donar-nos n. 69 00:04:19,570 --> 00:04:26,860 I llavors, vam seguir acabant codificació nostre text pla per aconseguir Noh x lvne. 70 00:04:26,860 --> 00:04:29,300 >> A partir d'aquest exemple, Vam demostrar que només avancem 71 00:04:29,300 --> 00:04:33,140 a la següent lletra de la paraula clau si el personatge en text sense format 72 00:04:33,140 --> 00:04:37,480 és una carta pel que el isalpha funció serà molt útil aquí. 73 00:04:37,480 --> 00:04:43,030 I, igual que en César, volem preservar el cas, isupper i islower. 74 00:04:43,030 --> 00:04:46,100 Per tant, afegir aquest poc en en el seu pseudocodi. 75 00:04:46,100 --> 00:04:48,510 >> Llavors, com podem esbrinar els canvis clau? 76 00:04:48,510 --> 00:04:53,030 Bé, si vostè recorda la nostra discussió en els índexs alfabètics al Caesar 77 00:04:53,030 --> 00:04:55,370 problema, és molt similar. 78 00:04:55,370 --> 00:05:01,130 >> On A correspon a un ASCII valor de 65, però un canvi de 0, 79 00:05:01,130 --> 00:05:03,550 i després l'última lletra en l'alfabet, Z, 80 00:05:03,550 --> 00:05:06,940 correspon a un desplaçament de 25. 81 00:05:06,940 --> 00:05:10,320 Es donarà compte de que el canvi és idèntic o no 82 00:05:10,320 --> 00:05:14,880 la lletra és majúscula o minúscula. 83 00:05:14,880 --> 00:05:17,700 >> OK, així que ara que vostè saber com esbrinar 84 00:05:17,700 --> 00:05:21,470 el canvi numèric que correspon a un únic caràcter 85 00:05:21,470 --> 00:05:24,050 Tornem a la nostra equació. 86 00:05:24,050 --> 00:05:28,180 A causa de que tenim dos diferents subíndexs aquí, I i J, 87 00:05:28,180 --> 00:05:32,130 això és un indici que volem fer un seguiment tant de la nostra posició en el text pla 88 00:05:32,130 --> 00:05:36,600 així com la nostra posició en la paraula clau, Així que aquests són dues variables independents 89 00:05:36,600 --> 00:05:39,010 que volem mantenir un celler de. 90 00:05:39,010 --> 00:05:42,580 >> Ara, la posició en la nostra de text clar augmentarà cada vegada, 91 00:05:42,580 --> 00:05:45,530 per la qual cosa serà una mica més cap endavant recta 92 00:05:45,530 --> 00:05:49,750 en oposició a la posició de la paraula clau, que sabem que ha de embolicar al voltant, 93 00:05:49,750 --> 00:05:52,910 i, de vegades d'increment, de vegades sent el mateix. 94 00:05:52,910 --> 00:05:55,430 Llavors, com podem posar en pràctica la funcionalitat 95 00:05:55,430 --> 00:05:59,820 per embolicar al voltant de la Índex de la paraula clau? 96 00:05:59,820 --> 00:06:01,640 >> Vaig a fer servir l'exemple, compti. 97 00:06:01,640 --> 00:06:06,100 Comptant és una forma popular per dividir la gent en grups. 98 00:06:06,100 --> 00:06:10,660 Dir que tenia 5 persones i volia dividir-les en tres grups, 99 00:06:10,660 --> 00:06:13,640 bo, llavors m'agradaria començar explicant fora. 100 00:06:13,640 --> 00:06:16,980 La primera persona el faria diuen que sóc número u de l'equip, 101 00:06:16,980 --> 00:06:21,030 la següent persona seria el nombre d'equip 2, el nombre de l'equip tercera persona 102 00:06:21,030 --> 00:06:21,910 3. 103 00:06:21,910 --> 00:06:25,910 Ara, l'únic que vull tres grups pel la quarta persona faria realitat 104 00:06:25,910 --> 00:06:30,160 començar pel principi i dir, bo, jo sóc número u de l'equip, així, 105 00:06:30,160 --> 00:06:32,890 i la següent persona seria l'equip número dos. 106 00:06:32,890 --> 00:06:37,660 I, a partir d'aquí, es pot llavors separar en els seus grups. 107 00:06:37,660 --> 00:06:41,130 >> Llavors, com podria jo fer servir mòdul que m'ajudi a implementar 108 00:06:41,130 --> 00:06:44,160 Aquest recompte de reciclatge de la funció? 109 00:06:44,160 --> 00:06:50,140 Bé, la primera persona número 1, mod 3 ens dóna 1. 110 00:06:50,140 --> 00:06:54,690 2 mod 3 ens dóna 2, i 3 mod 3 ens dóna 0. 111 00:06:54,690 --> 00:07:02,140 >> La quarta persona, nombre 4, 3 mod ens dóna 1, i després 5 mod 3 ens dóna 2. 112 00:07:02,140 --> 00:07:05,370 Per tant, es donarà compte de que tot i el nombre de persones que tinc 113 00:07:05,370 --> 00:07:11,210 augmenta, i està per sobre 3, ja que estic modding per 3 114 00:07:11,210 --> 00:07:15,250 Sempre em donen els números 0, 1 i 2. 115 00:07:15,250 --> 00:07:19,040 Mai amb si gran que 3. 116 00:07:19,040 --> 00:07:22,630 Així doncs, fins i tot si tingués 10 persones, i totes aquestes persones 117 00:07:22,630 --> 00:07:27,430 encara seria dins dels grups 1, 2, o 0. 118 00:07:27,430 --> 00:07:33,560 >> Així que, ara sabem que si tenim un grup de 5 i ens mod tots els de 3, 119 00:07:33,560 --> 00:07:38,180 llavors mai anem a excedeixi els grups 0, 1, o 2. 120 00:07:38,180 --> 00:07:43,430 Per tant, mai aconseguirem un grup nombre que és igual a 3 o superior. 121 00:07:43,430 --> 00:07:46,980 Per tant, fins i tot si afegeixo cinc la gent, llavors tots ells 122 00:07:46,980 --> 00:07:53,150 seguirien estant assignat als grups 0, 1, 2 o perquè estic modding per 3. 123 00:07:53,150 --> 00:07:56,510 Mai vaig a ser superior a la tapa. 124 00:07:56,510 --> 00:08:00,800 >> OK, així que anem a veure si podem aplicar aquest concepte de la utilització de mòdul 125 00:08:00,800 --> 00:08:03,710 per embolicar al voltant de la nombres de grup i aplicar 126 00:08:03,710 --> 00:08:08,000 a on volem Vigenère utilitzar per embolicar al voltant de mòdul 127 00:08:08,000 --> 00:08:10,220 l'índex de la paraula clau. 128 00:08:10,220 --> 00:08:12,830 Tot i que estem incrementant l'índex que sempre 129 00:08:12,830 --> 00:08:17,260 voldrà assegurar-se que sempre embolicar al principi 130 00:08:17,260 --> 00:08:20,050 sense excedir mai el longitud de la cadena. 131 00:08:20,050 --> 00:08:23,510 >> OK, així que sé que podria ser una mica aclaparador. 132 00:08:23,510 --> 00:08:26,670 Hi ha molt més que fer en aquest joc pàg. 133 00:08:26,670 --> 00:08:30,050 Per tant, assegureu-vos que escrigui un bon pseudocodi per a vostè 134 00:08:30,050 --> 00:08:32,870 que entén i que fa la feina. 135 00:08:32,870 --> 00:08:35,580 Tractar de fer front a totes les sola línia independent 136 00:08:35,580 --> 00:08:38,370 esbrinar tots els petits petites peces del trencaclosques 137 00:08:38,370 --> 00:08:40,260 abans de posar-ho junts. 138 00:08:40,260 --> 00:08:43,110 >> Assegureu-vos que vostè pot aconseguir la clau de la línia d'ordres 139 00:08:43,110 --> 00:08:46,780 i assegureu-vos que és alfabètic, obtenir el text pla de l'usuari, 140 00:08:46,780 --> 00:08:51,010 i després en el xifrat, assegureu-vos saber com xifrar una sola lletra, 141 00:08:51,010 --> 00:08:56,130 i després progressar a tota la cadena de amb tota l'embolcall al voltant de funcions. 142 00:08:56,130 --> 00:08:59,610 Finalment, es pot imprimir el text xifrat. 143 00:08:59,610 --> 00:09:04,050 >> El meu nom és un Zamyla, i això va ser Vigenère. 144 00:09:04,050 --> 00:09:07,757