>> Zamyla Chan: Lassen Sie uns auf Schritt unsere Spiel mit der Vigenère-Chiffre.
Die Vigenère ist sehr ähnlich wie Caesar,
außer in Caesar kamen wir in eine einzelne ganze Zahl als unser Schlüssel.
In Vigenere werden wir in einem Stichwort zu übergeben.
Also, wenn ich wollte, die zu verschieben Geheimtext ist dies CS 50 von ohai,
dann bedeutet das, dass jeder Brief in ohai wird als Schlüssel dienen,
und ich werde Zyklus über dass Schlüsselwort für meine Schicht
so dass die chiffrierten Text viel schwieriger zu entschlüsseln.
>> Was bedeutet es, Verschiebung durch das Schlüsselwort?
Nun, das ist das Schlüsselwort eine Zeichenkette wo jeder Buchstabe entspricht
bis zu einem gewissen ganzzahligen Verschiebung.
Also, die o zu einem Schlüssel von 14 entspricht, h zu einem Schlüssel von 7, a hat einen Schlüssel von 0,
so dass würde nichts ändern, und dann hat i einen Schlüssel von 8.
>> Sagen wir, ich Vigenere A mit der lief Klartext dieses CS50 gut ist,
das wäre einfach geben mir eine unveränderte Zeichenfolge.
Beachten Sie, dass dies äquivalent zu Caesar mit einem Schlüssel von Null läuft.
In der Tat läuft Vigenere mit jedem einzelnen Zeichen
wäre gleichbedeutend mit Lauf Caesar mit dem gleichen integer.
>> Also gut, ja, da sie sind so ähnlich, ich würde
wenn Sie tatsächlich empfehlen, möchten, können Sie Ihre Caesar einfach kopieren
Code in Ihre Vigenere-Code.
Dinge werden sich verändern, aber zumindest haben Sie
einige Rückgrat, die Sie mit arbeiten können.
Da die TODOs sind die gleichen wir wollen den Schlüssel zu bekommen, den Klartext zu erhalten,
chiffrieren, dass Klartext, und dann drucken, dass aus.
>> Genau wie Caesar der Schlüssel wird sich übergeben als zweite Kommandozeile
Argument in argv Index enthaltenen 1, aber es ist dieses Mal anders
denn es muss alphabetisch sein.
Also müssen wir jeden iterieren einzelnes Zeichen in diesem Schlüssel
dass der Benutzer übergeben, und sicherzustellen, dass jeder Charakter ist alphabetisch
um fortzufahren.
>> Sobald wir das getan haben, wir dann erhalten die Zeichenfolge der Benutzer,
genauso wie wir vorher.
Und jetzt kommen wir zum Herzen des Problems für Vigenere,
Das ist genau wie Caesar, wie man herauszufinden, die Chiffrierung Muster aus
und Gleichung, und chiffrieren der gesamte Klartext.
>> Also, werden Sie feststellen, dass die Gleichung für die Vigenere Verschiebung
ist sehr ähnlich zu dem einen Caesar.
Der einzige Unterschied ist, dass anstelle einer einzelnen Variable k
vor, jetzt hat k einen Index, Angabe der j-ten Buchstaben des Schlüssels.
>> Lassen Sie uns ein Beispiel zu Fuß.
Angenommen, Sie wollten ein Geheimnis zu passieren Nachricht auf Ihrer Crush, Ich mag dich.
Nun, für Ihre Schlüssel, den Sie Wählen Sie etwas, das Ihre
wissen Crush weiß, dass Sie mögen, Pandas.
In Ordnung, so wie Sie verschieben wir das?
>> Nun, wir haben unsere Klartext-Index.
Das ist auf den ersten Buchstaben und so ist der Index für unser Schlüssel
der an der p, der erste Schreiben Sie in unserem Panda Wort.
Also, ich Verschiebung von p uns gibt x, dann treiben wir den Klartext-Index.
Dies bringt uns in einen Raum.
Nun, das Leerzeichen ist nicht alphabetisch,
das bedeutet, so dass, dass nur Transfers direkt über in die chiffrierten Text,
wir setzen dort einen Raum, und wir tun es nicht den Index für unsere Schlüssel vorantreiben.
Also, wir sind immer noch auf p an dieser Stelle.
>> Wir zum nächsten Index in unserem Klartext.
Und jetzt, denn das ist, ein Brief, der kleine l,
verschieben wir, dass durch die nächsten Index in unseren Schlüssel.
Und das ist eine, die eine Null ist Verschiebung, so dass wird nur
ein l in unserer chiffrierten Text.
Dann treiben wir sowohl den Klartext, und der Schlüsselindex, weil es alphabetisch.
Also dann fahren wir fort, dass bis wir an die e in wie zu bekommen.
>> Na gut, so dass Sie auf diese auffallen wird, zeigen, dass in Bezug auf unsere Schlüsselindex,
wir haben das Ende erreicht der Panda Wort, so was
passiert, wenn wir auf die nächste erhalten alphabetischen Buchstaben im Klartext?
Nun, alles, was passiert ist, wir Verpackung um zu Beginn,
an den ersten Index der Schlüssel.
Also, dann verschieben wir, dass y durch p, um uns n.
Und dann setzen wir Codierung Finishing unsere Klartext x lvne noh zu bekommen.
>> Aus diesem Beispiel I nur gezeigt, dass wir voran
zum nächsten Buchstaben im Schlüsselwort wenn das Zeichen im Klartext
ist ein Brief, so der isalpha Funktion ist praktisch, hier.
Und genau wie in Caesar, wollen wir bewahren den Fall, isupper und islower.
Also, fügen Sie diese wenig in in die Pseudo-Code.
>> Wie stellst wir die wichtigsten Veränderungen aus?
Nun, wenn Sie sich erinnern, unsere Diskussion auf alphabetischen Indizes im Caesar
Problem, es ist sehr ähnlich.
>> Wobei A entspricht einem ASCII Wert von 65, aber eine Verschiebung von 0,
und dann der letzte Buchstabe im Alphabet, Z,
entspricht einer Verschiebung von 25.
Sie werden feststellen, dass die Verschiebung identisch ist, ob oder nicht
der Brief ist in Groß- oder Kleinschreibung.
>> OK, also jetzt, dass Sie wissen, wie um herauszufinden,
die numerische Verschiebung, entspricht einem einzelnen Zeichen
Lassen Sie uns zu unserer Gleichung zurückgehen.
Weil wir zwei verschiedene Subskripte hier, i und j,
das ist ein Hinweis, dass wir wollen, den Überblick zu behalten sowohl unsere Position im Klartext
sowie unsere Position im Schlüsselwort, so dass diejenigen, sind zwei getrennte Variablen
dass wir wollen, einen Halt zu halten.
>> Nun wird die Position in unserem Klartext wird jedes Mal zu erhöhen,
so dass wird eine sein etwas mehr geradeaus
wie das Schlüsselwort in die Position gegenüber, wir wissen es herum wickeln,
und manchmal inkrementieren, manchmal gleich bleiben.
So, wie wir implementieren die Funktionalität
zu wickeln um die Index für das Schlüsselwort?
>> Ich werde das abzählen Beispiel zu verwenden.
Abzählen ist ein beliebter Weg, Menschen in Gruppen aufgeteilt.
Sagen hatte ich 5 Personen, und ich wollte spalten sie in drei Gruppen,
gut, dann würde ich durch Abzählen starten.
Die erste Person, würde sagen, ich bin Team die Nummer eins,
die nächste Person würde Team Zahl sein zwei, die dritte Person Teamnummer
drei.
Nun, ich möchte nur drei Gruppen so die vierte Person würde tatsächlich
beginnen am Anfang und sagen, gut, ich bin Team Nummer eins als auch,
und die nächste Person wäre Team Nummer zwei.
Und von dort können sie dann trennen sich in ihren Gruppen.
>> Also, wie kann ich Modulo verwenden mir zu helfen, implementieren
diese Wrap-around-Funktion abzählen?
Nun, die erste Person, Nummer 1, mod 3 gibt uns 1.
2 mod 3 gibt uns 2, und 3 mod 3 gibt uns 0.
>> Die vierte Person, Nummer 4, mod 3 gibt uns 1 und dann 5 mod 3 gibt uns 2.
Also, werden Sie feststellen, dass, obwohl die Zahl der Menschen, die ich habe
zunimmt, und oberhalb 3, da ich Modden von 3
Ich bekomme immer Zahlen 0, 1 und 2.
Ich habe nie mehr als 3.
Also, auch wenn ich hatte 10 Menschen, dann werden alle von den Menschen,
wäre immer noch Gruppen innerhalb von 1, 2 oder 0.
>> So, jetzt wissen wir, dass, wenn wir haben eine Gruppe von 3 von 5 und wir alle die mod,
dann sind wir nie gehen überschreiten Gruppen 0, 1 oder 2.
Also, wir gehen nie eine Gruppe zu erhalten Zahl, die 3 oder höher gleich ist.
Also, auch wenn ich hinzufügen, fünf mehr Menschen, dann von ihnen alle
würde immer noch zu Gruppen zugeordnet werden, 0, 1 oder 2, weil ich Modden von 3.
Ich werde nie die Caps nicht übersteigen.
>> OK, lassen Sie uns so sehen, ob wir anwenden können Dieses Konzept der Verwendung von Modulo
zu wickeln um die Gruppennummern und anwenden
es VIGENERE wo wir wollen zu verwenden Modulo herum wickeln
der Index für das Schlüsselwort.
Auch wenn wir Inkrementieren der Index wir immer
sicherstellen möchten, dass wir immer Wrap-around an den Anfang
nie mehr als die Länge der Zeichenfolge.
>> OK, also weiß ich, es könnte sein, ein wenig überwältigend.
Es gibt viel mehr in diesem p Satz zu tun.
Also, stellen Sie sicher, dass Sie schreiben eine gute Pseudo-Code für sich selbst
dass Sie verstehen, und dass bekommt den Job zu erledigen.
Versuchen Sie, und adressieren alle einzelne Zeile unabhängig
herauszufinden, all die kleinen kleine Teile des Puzzles
bevor es zusammenzusetzen.
>> Stellen Sie sicher, dass Sie bekommen können der Schlüssel von der Kommandozeile
und stellen Sie sicher, dass es alphabetisch, Holen Sie sich die Klartext vom Benutzer,
und dann in die Chiffrierung, stellen Sie sicher, dass Sie wissen, wie man einen einzelnen Buchstaben zu chiffrieren,
und dann den nächsten Schritt auf die gesamte Zeichenfolge mit allen der Wrap-around-Funktionen.
Schließlich können Sie die verschlüsselten Text drucken.
>> Mein Name ist ein Zamyla, und dies war Vigenere.