>> Zamyla Chan: Facciamo un passo il nostro gioco con il cifrario Vigenère.
La cifra è Vigenere molto simile a Cesare,
fatta eccezione per Cesare siamo passati a un singolo intero come la nostra chiave.
In Vigenere stiamo andando a passare in una parola chiave.
Quindi, se volevo spostare la testo cifrato questo è CS 50 per ohai,
allora ciò significa che ogni lettera ohai sta andando a servire come chiave,
e ho intenzione di ciclo sopra quella parola chiave per il mio turno
rendendo il testo cifrato molto più difficile da decodificare.
>> Che cosa vuol dire spostare dalla parola chiave?
Bene, la parola chiave è una stringa dove ogni lettera corrisponde
a qualche turno intero.
Così, la o corrisponde ad una chiave di 14, h ad una chiave di 7, un ha una chiave di 0,
in modo che non cambierebbe nulla, e poi mi ha una chiave di 8.
>> Di 'Ho corso Vigenere A con il testo normale questo è CS50 bene,
che sarebbe semplicemente dare me una stringa immutata.
Si noti che questo è equivalente a esecuzione di Cesare con una chiave di zero.
Infatti, in esecuzione Vigenere con ogni singolo carattere
sarebbe equivalente a esecuzione Cesare con lo stesso numero intero.
>> Va bene, quindi, dal momento che essi sono così simili che avevo
in realtà raccomandare che se si desidera si può semplicemente copiare il Caesar
il codice nel codice Vigenere.
Le cose cambieranno, ma almeno hai
una spina dorsale che si può lavorare.
Perché i TODOs sono gli stessi che vogliamo per ottenere la chiave, ottenere il testo in chiaro,
encipher che testo normale, e quindi stampare quello fuori.
>> Proprio come Cesare la chiave sta per da passare come seconda linea di comando
argomentazione contenuta nell'indice argv 1, ma è diverso questa volta
perché deve essere alfabetico.
Quindi, abbiamo bisogno di iterare su ogni singolo carattere in quella chiave
che l'utente passava, e garantire che ogni personaggio è alfabetico
per continuare.
>> Una volta che abbiamo fatto questo, allora siamo può ottenere la stringa da parte dell'utente,
proprio come abbiamo fatto prima.
E ora, veniamo al cuore del problema per Vigenere,
che è proprio come Cesare, come capire il modello di cifratura
e l'equazione, e encipher l'intero testo in chiaro.
>> Quindi, si noterà che il equazione per lo spostamento Vigenere
è molto simile a quello Caesar.
L'unica differenza è che invece di una singola variabile k
prima, ora k ha un pedice, indicazione della lettera j-esimo della chiave.
>> Camminiamo con un esempio.
Diciamo che si voleva far passare un segreto messaggio sul vostro sbandata, mi piaci.
Beh, per la chiave voi scegliere qualcosa che la tua
sapere cotta sa che ti piace, panda.
Va bene, così come possiamo spostiamo questo?
>> Bene, abbiamo il nostro indice di testo in chiaro.
Questo è alla prima lettera e così è l'indice per la nostra chiave
che è al p, la prima lettera nella nostra parola panda.
Così, spostando ho da p noi x dà, poi si avanza l'indice di testo in chiaro.
Questo ci porta ad uno spazio.
Ora, il carattere di spazio è non alfabetica,
in modo che significa che, che appena trasferimenti a destra oltre al testo cifrato,
mettiamo uno spazio lì, e noi non facciamo avanzare l'indice per la nostra chiave.
Quindi, siamo ancora a p a questo punto.
>> Avanziamo alla prossima indice nel nostro testo in chiaro.
E ora, perché questo è una lettera, la lettera minuscola l,
spostiamo che dal successivo indice nella nostra chiave.
Che è, che è uno zero spostamento in modo che diventa solo
un l nel nostro testo cifrato.
Poi, abbiamo anticipato sia il testo in chiaro, e l'indice chiave perché è alfabetico.
Allora continuiamo che fino ad arrivare alla posta in come.
>> Va bene, allora si noterà a questo punto che, in termini di nostro indice chiave,
abbiamo raggiunto la fine del la parola del panda, così che cosa
succede quando arriviamo a quello successivo lettera alfabetica nel testo in chiaro?
Ebbene, tutto ciò che accade è che avvolgere intorno al principio,
il primo indice della nostra chiave.
Così, allora ci spostiamo che y da p per darci n.
E poi, continuiamo finendo codifica il nostro testo in chiaro per ottenere x lvne noh.
>> Da questo esempio, ho dimostrato che solo l'avanzamento
alla lettera successiva nella parola chiave se il personaggio in formato testo
è una lettera così il isalpha la funzione sarà utile qui.
E, proprio come in Cesare, vogliamo preservare il caso, isupper e islower.
Quindi, aggiungere questo po ' in nel vostro pseudocodice.
>> Quindi, come possiamo capire i cambiamenti principali?
Beh, se vi ricordate la nostra discussione sugli indici alfabetici nel Caesar
problema, è molto simile.
>> Dove A corrisponde a un ASCII valore di 65, ma uno spostamento di 0,
e poi l'ultima lettera in alfabeto, Z,
corrisponde ad uno spostamento di 25.
Si noterà che il cambiamento è identica o meno
la lettera è maiuscola o minuscola.
>> OK, ora che si saper capire
lo spostamento numerico che corrisponde ad un singolo carattere
torniamo alla nostra equazione.
Perché abbiamo due diversi indici qui, i e j,
questo è un suggerimento che vogliamo tenere traccia sia della nostra posizione nel testo in chiaro
nonché la nostra posizione la parola, così quelli sono due variabili distinte
che vogliamo mantenere una stretta di.
>> Ora, la posizione nel nostro crittografato è destinato ad aumentare ogni volta,
in modo che sta per essere un po 'più dritto in avanti
rispetto alla posizione della parola chiave, che come sappiamo ha da avvolgere intorno,
e talvolta incrementare, a volte rimanere lo stesso.
Quindi, come possiamo attuare la funzionalità
per avvolgere intorno al indice per la parola chiave?
>> Ho intenzione di utilizzare l'esempio contare off.
Contando fuori è un modo popolare per dividere le persone in gruppi.
Dire che ho avuto 5 persone e volevo li divisi in tre gruppi,
Ebbene vorrei iniziare contando fuori.
La prima persona sarebbe dire che sono il numero uno della squadra,
la prossima persona sarebbe il numero di squadra due, il numero squadra terza persona
tre.
Ora, voglio solo tre gruppi in modo la quarta persona sarebbe in realtà
cominciare dall'inizio e dire, bene, io sono il numero uno della squadra pure,
e la prossima persona sarebbe il numero due team.
E, da lì, si può quindi separare nei loro gruppi.
>> Così, come potrei usare modulo per aiutarmi a implementare
questo conteggio fuori avvolgono la funzione?
Bene, la prima persona il numero 1, mod 3 ci dà 1.
2 mod 3 ci dà 2, e 3 mod 3 ci dà 0.
>> La quarta persona, il numero 4, 3 mod ci dà 1, e poi 5 mod 3 ci dà 2.
Quindi, si noterà che anche se il numero di persone che ho
aumenta, ed è sopra 3, dal momento che sto modding del 3
Ho sempre trovato i numeri 0, 1 e 2.
Non ho mai ottenere maggiore di 3.
E allora, anche se ho avuto 10 persone, poi tutte quelle persone
sarebbe ancora all'interno dei gruppi 1, 2, o 0.
>> Così, ora sappiamo che se abbiamo un gruppo 5 e mod tutti quelli del 3,
allora stiamo andando mai superare i gruppi 0, 1 o 2.
Quindi, non riusciremo mai a ottenere un gruppo numero che è uguale a 3 o superiore.
Quindi, anche se aggiungo altri cinque persone, allora tutti loro
sarebbe ancora essere attribuite ai gruppi 0, 1, 2 o perché sono modding del 3.
Non sono mai intenzione di superare quella cap.
>> OK, vediamo se possiamo applicare questo concetto di utilizzare modulo
per avvolgere intorno al numeri di gruppo e applicare
a Vigenere dove vogliamo utilizzare modulo per avvolgere
l'indice per la parola chiave.
Anche se stiamo incrementando l'indice abbiamo sempre
vuole fare in modo che abbiamo sempre avvolgere intorno alla fin dall'inizio
mai superare il lunghezza della stringa.
>> OK, quindi so che potrebbe essere un po 'opprimente.
C'è molto di più da fare in questo p set.
Quindi, assicurarsi che si scrive un buon pseudocodice per te
che si capisce e che ottiene il lavoro fatto.
Cercare di affrontare ogni singola linea in modo indipendente
capire tutti i piccoli piccoli pezzi del puzzle
prima di metterlo insieme.
>> Assicurarsi che si può ottenere la chiave dalla riga di comando
e garantire che è alfabetico, ottenere il testo in chiaro da parte dell'utente,
e poi a cifratura, assicuratevi sapere come cifrare una sola lettera,
e poi il progresso per l'intera stringa con tutte le avvolgono funzioni.
Infine, è possibile stampare il testo cifrato.
>> Il mio nome è un Zamyla, e questo è stato Vigenere.