Am Ende des Zeitraums werden wir uns die Einführung in die Hausaufgaben zur Informationssicherheit ansehen. Ich habe zufällig den Playfair -Algorithmus und den Hill -Algorithmus im klassischen Kryptographie -Algorithmus begegnet. Es ist interessant, es in JavaScript -Sprache zu implementieren. Ich überprüfe Baidu während der Codierung und gebe dann ein gutes Tutorial über die Grundlagen von JavaScript.
Playfair
Playfair -Passwort (Englisch: Playfair Cipher oder Playfair Square) ist ein Ersatzkennwort. Geschrieben basierend auf einer 5*5 Quadratmeter -Chiffre -Tabelle mit 25 Buchstaben in der Tabelle. Entfernen Sie für die 26 Buchstaben in englischer Sprache den am häufigsten verwendeten Z, um eine Passworttabelle zu bilden.
Implementierungsideen:
1. Bereiten Sie eine Passwortliste vor
Ein Schlüssel ist ein Wort oder eine Phrase, und die Kennworttabelle wird basierend auf dem vom Benutzer angegebenen Schlüssel aussortiert. Wenn es doppelte Buchstaben gibt, können Sie die doppelten Buchstaben anschließend entfernen.
Zum Beispiel kann der wichtigste verrückte Hund zusammengestellt werden
| C | O | H | M | T |
| R | G | ICH | N | U |
| A | B | J | P | V |
| Y | E | K | Q | W |
| D | F | L | S | X |
Die Codekopie lautet wie folgt:
/*
* Funktion: Kennwortliste kompilieren
*
* Parameter: Schlüssel (Raumentfernung und Kapitalisierungsverarbeitung)
*
* Rückgabe: Passwort Tabelle
*/
Funktion createKey (Keychars) {
// Alphabetisches Array
var allchars = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', ',', ',', ',', ',', ','
// Variable Schlüsselchars erhalten die Position des Buchstabens in der alphabetischen Tabelle und löschen Sie den Buchstaben
für (var i = 0; i <keychars.length; i ++) {
var index = alleChars.indexof (Keychars [i]);
if (index> -1) {
alleChars.splice (Index, 1);
}
}
// Fügen Sie die Buchstaben im Schlüsselchar in das Alphabet ein
für (var i = keyChars.length-1; i> = 0; i-) {
alleChars.Unshift (Keychars [i]);
}
// Keychars aus der ersten Spalte in die Kennworttabelle einfügen
für (var i = 0; i <5; i ++) {
für (var j = 0; j <5; j ++) {
Schlüssel [j] [i] = Allchars [i*5+j];
}
}
}
In Anbetracht der Tatsache, dass die doppelten Zeichen und Z beim Einfügen von Keychars in die Passworttabelle entfernt werden müssen, lautet der Designalgorithmus wie folgt:
Die Codekopie lautet wie folgt:
/*
* Funktion: Entfernen Sie doppelte Buchstaben aus Zeichenfolgen
*
* Parameter: Zeichenfolgen, die verarbeitet werden müssen
*
* Rückgabe: Verarbeitete Zeichenfolge
*/
Funktion Remeduplikat (str) {
var result = [], tempstr = "";
var arr = str.split (''); // Teilen Sie die Zeichenfolge in ein Array auf
//arr.sort();//sorting
für (var i = 0; i <arr.length; i ++) {
var repepback = true; // Die Entwurfsvariable besteht darin, sicherzustellen, dass der vorherige Teil der Zeichenfolge in denselben Zeichen nicht vorhanden ist, da der folgende Algorithmus nur sicherstellen kann
für (var j = 0; j <result.length; j ++) {
if (arr [i] == Ergebnis [j])
Wiederholung = falsch;
}
if (arr [i]! == tempstr && repepback) {
result.push (arr [i]);
tempstr = arr [i];
}anders{
weitermachen;
}
}
Rückgabeergebnis.
}
2. organisieren Sie den klaren Text
Machen Sie ein Paar zwei Buchstaben des einfachen Textes. Wenn es zwei identische Buchstaben nebeneinander gibt oder der letzte Buchstabe Single ist, fügen Sie einen Buchstaben X ein. In der frühen Kodierungsphase war er nicht rücksichtsvoll und weigerte sich, die Anzahl der Buchstaben als Singular einzugeben, was die Benutzererfahrung schlecht machte.
var k = document.getElementById ("Keychars"). value.toUpperCase (). Ersetzen (// s/ig, '');
Räume entfernen und für einfache Text in Großbuchstaben konvertieren.
3. Schreiben Sie einen Cipher -Text
Regeln der Klartextverschlüsselung (von Baidu):
1) Wenn P1 P2 auf derselben Linie liegt, ist der entsprechende Chiffretext C1 C2 der Buchstaben nahe dem rechten Ende von P1 P2. Die erste Spalte gilt als die rechte Seite der letzten Spalte. Zum Beispiel entspricht CT nach der vorherigen Tabelle OC
2) Wenn sich P1 P2 in derselben Spalte befindet, ist der entsprechende Chiffretext C1 C2 die Buchstaben unmittelbar unter p1 p2. Die erste Zeile gilt unter der letzten Zeile.
3) Wenn sich P1 und P2 nicht in derselben Zeile und in derselben Spalte befinden, sind C1 und C2 in den beiden anderen Ecken des durch P1 und P2 festgelegten Rechtecks Buchstaben (wie für den horizontalen Austausch oder den vertikalen Austausch müssen Sie einen Termin im Voraus vereinbaren oder selbst probieren). Gemäß der vorherigen Tabelle entspricht WH TK oder KT.
Zum Beispiel gibt es gemäß der obigen Tabelle, dem einfachen Text, in dem es ein Leben gibt, Hoffnung.
Sie können es zuerst in diejenigen organisieren, in der er sich befindet.
Dann ist der Chiffretext: kt yg wo ok gy nl hj von cm yg kg lm mb wf
Verwandeln Sie den Chiffrikett in das Kapital und ordnen Sie ihn dann in Gruppen mehrerer Buchstaben an.
Zum Beispiel in einer Gruppe von 5 ktygw ookgy nlhjo fcmyg kglmm bwf
4. Entschlüsselung
Füllen Sie eine 5*5 -Matrix aus (wiederholen Sie die wiederholten Buchstaben und Buchstaben z), füllen Sie die verbleibenden Positionen der Matrix in die verbleibenden Positionen der Matrix aus und erhalten Sie den einfachen Text aus dem Chiffretext gemäß der Ersatzmatrix. Mach das Gegenteil.
Der Effekt ist wie in der Abbildung dargestellt:
hügel
Hill Password ist ein Ersatzkennwort, das das grundlegende Prinzip der Matrix -Theorie verwendet. Geschrieben basierend auf einer 5*5 Quadratmeter -Chiffre -Tabelle mit 25 Buchstaben in der Tabelle. Entfernen Sie für die 26 Buchstaben in englischer Sprache den am häufigsten verwendeten Z, um eine Passworttabelle zu bilden.
Implementierungsideen:
1. Schreiben Sie ein Alphabet
var chars = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'H', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'P', 'q', 'R', '', ',';
2. Erzeugen Sie zufällig Schlüssel
Die Codekopie lautet wie folgt:
/*
* Funktion: Erzeugen Sie zufällig Schlüssel
*
* Rückkehr: Schlüsselmatrix
*/
Funktion randomCreateKey () {
// generieren zufällig Zahlen von 0 bis 26
für (var i = 0; i <3; i ++) {
für (var j = 0; j <3; j ++) {
Schlüssel [i] [j] = math.round (math.random ()*100%26)
}
}
}
3. Schlüsselcode, verarbeiten Sie den Klartext basierend auf dem automatisch generierten Schlüssel:
Die Codekopie lautet wie folgt:
/*
* Funktion: Hillalgorithmus
*
* Parameter: Großbuchstaben mit mehreren Länge 3
*
* Rückkehr: Verschlüsselte Zeichenfolge
*/
Funktion Hill (p) {
// Großbuchstaben Cipher Text
var res = "";
// Entwickeln Sie die Gesamtzeit, mit der die Zeichenfolge durchquert werden muss
var rund = math.round (P.Length/3);
//bewältigen
für (var b = 0; b <rund; b ++) {
// einfacher Text 3
var temp3 = "";
var temparr3 = [];
var sumarr3 = [];
für (var i = 0; i <3; i ++) {
temp3 += p.Shift ();
für (var j = 0; j <chars.length; j ++) {
if (temp3 [i] == chars [j])
temparr3 [i] = j;
}
}
//berechnen
für (var i = 0; i <3; i ++) {
für (var j = 0; j <3; j ++) {
sumarr3 [i] = (temparr3 [j]*key [i] [j])%26;
}
}
// Erhalten Sie den entsprechenden Zeichen der Zeichen im Alphabet
für (var i = 0; i <3; i ++) {
res += chars [sumarr3 [i]];
}
}
return res;
};
Der Effekt ist wie in der Abbildung dargestellt:
Die obigen Algorithmen haben Mängel:
1. prozessorientiertes Design, hohe Kupplungsgrad
2. Zu viele verschachtelte Schleifen, Algorithmus -Effizienz muss optimiert werden
3.. Unzureichende Berücksichtigung möglicher Situationen, z. B. nicht der Verarbeitung, wenn der Benutzer nicht alphabetische Zeichen eintritt.
Zusammenfassen:
Nachdem ich den Kurs für einen bestimmten Zeitraum in die Informationssicherheit studiert habe, kann ich nur die Grundlagen der Informationssicherheit verstehen. Informationssicherheit ist ein sehr interessantes Thema. Wenn Sie auf einige Probleme stoßen, denken Sie so viel wie möglich, tun Sie mehr und verwenden Sie mehr. Gleichzeitig müssen wir auch die Anhäufung der mathematischen Grundlage stärken, die JS -Stiftung konsolidieren und das Wissen erweitern. Diese Straße hat noch einen langen Weg vor uns.