1 00:00:00,000 --> 00:00:10,101 >> [MUSIC PLAYING] 2 00:00:10,101 --> 00:00:12,700 >> ZAMYLA CHAN: Facciamo implementare Vigenère, un po 'più 3 00:00:12,700 --> 00:00:14,710 garantire cifrario di Cesare. 4 00:00:14,710 --> 00:00:19,670 Il testo in chiaro viene cifrato utilizzando una stringa invece di un numero intero. 5 00:00:19,670 --> 00:00:22,970 Ogni carattere alfabetico in testo in chiaro viene spostata di un 6 00:00:22,970 --> 00:00:24,450 lettera nella parola chiave. 7 00:00:24,450 --> 00:00:30,860 >> In questo esempio, la parola chiave ohai, O corrisponde ad uno spostamento di 14; H ad una 8 00:00:30,860 --> 00:00:36,910 spostamento di 7; A, spostamento di 0, e ho un turno di 8. 9 00:00:36,910 --> 00:00:40,710 Se hai implementato con successo la tua Cifrario di Cesare, sarà una bella 10 00:00:40,710 --> 00:00:43,510 quadro da cui è possono implementare Vigenere. 11 00:00:43,510 --> 00:00:47,140 Come si può vedere, l'esecuzione di un Vigenère cifrario con un singolo carattere come 12 00:00:47,140 --> 00:00:51,830 parola chiave è la stessa cosa come un cifrario di Cesare. 13 00:00:51,830 --> 00:00:55,170 >> La stessa procedura si applica per Vigenère come hanno fatto a Cesare. 14 00:00:55,170 --> 00:01:01,240 La parola chiave è la seconda linea di comando argomento, in modo da accedervi con argv1. 15 00:01:01,240 --> 00:01:05,400 Quindi è necessario verificare che la chiave parola è davvero tutto alfabetico. 16 00:01:05,400 --> 00:01:09,040 Qui è dove è alpha può tornare utile. 17 00:01:09,040 --> 00:01:13,550 Se si dispone di una chiave valida, si ottiene il forza da parte dell'utente, e quindi 18 00:01:13,550 --> 00:01:15,820 sei pronto per cifrare. 19 00:01:15,820 --> 00:01:20,840 >> La formula cifrario di Vigenère è simile a Cesare formula, solo che adesso k 20 00:01:20,840 --> 00:01:27,650 diventa K pedice j, indicando la j-esima lettera della parola chiave. 21 00:01:27,650 --> 00:01:29,640 Facciamo un passo attraverso questo processo. 22 00:01:29,640 --> 00:01:34,060 Diciamo di voler inviare un messaggio al tuo crash, mi piaci, ma tu no 23 00:01:34,060 --> 00:01:35,190 che tutti sappiano. 24 00:01:35,190 --> 00:01:39,800 Quindi si utilizza un cifrario di Vigenère con il panda parola chiave, perché, bene, è anche 25 00:01:39,800 --> 00:01:41,160 come i panda. 26 00:01:41,160 --> 00:01:47,140 >> La prima lettera, io, sarà spostata da p, dando x, 15 lettere dopo che io, 27 00:01:47,140 --> 00:01:52,850 perché 15 p è il 16 ° lettera dell'alfabeto. 28 00:01:52,850 --> 00:01:56,750 La lettera successiva del testo in chiaro è uno spazio, in modo che non sarà spostata. 29 00:01:56,750 --> 00:02:00,420 E l'indice della parola chiave non cambierà. 30 00:02:00,420 --> 00:02:05,440 >> Poi la prossima lettera in chiaro è l, spostata di una, che non sposta 31 00:02:05,440 --> 00:02:10,930 la lettera testo affatto, perché a è la lettera 0a dell'alfabeto. 32 00:02:10,930 --> 00:02:14,980 Il processo continua, avanzando l' personaggio chiave ogni volta che c'è un 33 00:02:14,980 --> 00:02:16,840 lettera del testo in chiaro. 34 00:02:16,840 --> 00:02:21,850 Una volta che l'ultima lettera la parola chiave è raggiunto, la parola chiave avvolge e 35 00:02:21,850 --> 00:02:25,890 sposta al prossimo pianura lettera del testo da p. 36 00:02:25,890 --> 00:02:27,170 X lvne noh. 37 00:02:27,170 --> 00:02:29,180 Che romantico. 38 00:02:29,180 --> 00:02:33,120 >> Quindi, dato un carattere, come si fa a convertire che nel corrispondente 39 00:02:33,120 --> 00:02:34,590 cifrare turno? 40 00:02:34,590 --> 00:02:37,870 Provate a confrontare l'ASCII valori per lo spostamento. 41 00:02:37,870 --> 00:02:41,530 Forse si può trovare un rapporto tra le lettere ed i loro 42 00:02:41,530 --> 00:02:44,550 Indice alfabetico utilizzando la matematica ASCII. 43 00:02:44,550 --> 00:02:48,850 Si può aggiungere o sottrarre un carattere da un altro per ottenere 44 00:02:48,850 --> 00:02:51,630 il risultato desiderato? 45 00:02:51,630 --> 00:02:55,480 >> Ricordate che i turni per maiuscolo e le lettere minuscole sono uguali. 46 00:02:55,480 --> 00:02:59,510 Quindi, forse, è necessario identificare due formule simili per rappresentare la 47 00:02:59,510 --> 00:03:03,570 spostamento, una per una maiuscola personaggio chiave, e uno 48 00:03:03,570 --> 00:03:06,510 per un unico minuscolo. 49 00:03:06,510 --> 00:03:10,630 >> Quindi, ricordate che la parola chiave avanza solo se il carattere nella 50 00:03:10,630 --> 00:03:13,520 testo è una lettera e che il caso della pianura 51 00:03:13,520 --> 00:03:16,020 il testo deve essere preservata. 52 00:03:16,020 --> 00:03:20,280 Quindi, se guardiamo la formula per il Vigenere turno, ci sono due indici 53 00:03:20,280 --> 00:03:22,880 variabili, i e j. 54 00:03:22,880 --> 00:03:26,795 Uno tiene traccia della posizione in pianura testo e l'altra posizione 55 00:03:26,795 --> 00:03:27,910 la parola chiave. 56 00:03:27,910 --> 00:03:32,960 Ma il vostro testo potrebbe essere molto più lungo oltre la parola chiave, in questo caso il vostro 57 00:03:32,960 --> 00:03:38,290 indice delle parole chiave deve avvolgere intorno alla schiena all'inizio della parola chiave. 58 00:03:38,290 --> 00:03:39,870 >> Come si fa a fare questo? 59 00:03:39,870 --> 00:03:43,740 Guardiamo indietro al operatore modulo. 60 00:03:43,740 --> 00:03:47,280 Modulo è definito è il resto di dividere due numeri. 61 00:03:47,280 --> 00:03:50,680 Ma che cosa è un pratico reale utilizzo di modulo? 62 00:03:50,680 --> 00:03:54,340 >> Beh, dire che hai un grande gruppo di persone, e avete bisogno di dividere in 63 00:03:54,340 --> 00:03:55,100 tre gruppi. 64 00:03:55,100 --> 00:03:59,500 Un modo per dividere le persone in gruppi è di farli contare fuori. 65 00:03:59,500 --> 00:04:03,520 È il numero del gruppo di gruppi numero 1, 2, e 3. 66 00:04:03,520 --> 00:04:08,510 La prima persona dirà 1, il successivo 2, il successivo 3. 67 00:04:08,510 --> 00:04:12,860 La persona dopo che dirà 1, poiché non vi è un gruppo 4, e l' 68 00:04:12,860 --> 00:04:15,880 conteggio ricomincia da lì. 69 00:04:15,880 --> 00:04:18,209 >> È possibile utilizzare modulo di fare la stessa cosa. 70 00:04:18,209 --> 00:04:22,680 Questa volta, i gruppi saranno essere di gruppo 0, 1, e 2. 71 00:04:22,680 --> 00:04:26,960 La prima persona, il numero 1 modulo 3, è 1. 72 00:04:26,960 --> 00:04:29,830 Persona 2 modulo 3 è 2. 73 00:04:29,830 --> 00:04:32,460 Persona 3 modulo 3 è 0. 74 00:04:32,460 --> 00:04:38,470 Persona 4 modulo 3 dà 1 e così i gruppi possono avvolgere intorno. 75 00:04:38,470 --> 00:04:44,700 >> Quindi, se si prende un indice e modulo tale indice da una dimensione massima, la 76 00:04:44,700 --> 00:04:49,820 risultato sarà mai essere maggiore o uguale alla dimensione, il che significa che si 77 00:04:49,820 --> 00:04:52,330 può aumentare l'indice come quanto vuoi. 78 00:04:52,330 --> 00:04:57,400 E tutto il tempo che il modulo indice qualche numero, non sarà possibile ottenere un numero 79 00:04:57,400 --> 00:04:58,510 grande di quello. 80 00:04:58,510 --> 00:05:04,500 Quindi abbiamo 10 persone invece di 5, e sarebbero tutti vengono assegnati a gruppi 81 00:05:04,500 --> 00:05:07,480 numero 0, 1 o 2. 82 00:05:07,480 --> 00:05:11,680 >> Provate ad applicare questo per avvolgere il parola chiave, tranne che invece di smistamento 83 00:05:11,680 --> 00:05:16,050 le persone in numeri di gruppo si desidera che il indice delle parole chiave in modo da poter 84 00:05:16,050 --> 00:05:19,080 ottenere il carattere giusto per il spostare senza superare il 85 00:05:19,080 --> 00:05:21,836 lunghezza della stringa. 86 00:05:21,836 --> 00:05:24,790 Con questo, hai il tuo Vigenère. 87 00:05:24,790 --> 00:05:27,790 Il mio nome è Zamyla, e questo è CS50. 88 00:05:27,790 --> 00:05:32,566