À la fin de la période, nous examinerons l'introduction aux devoirs de sécurité de l'information. J'ai rencontré l'algorithme Playfair et l'algorithme Hill dans l'algorithme de cryptographie classique. Il est intéressant de l'implémenter dans la langue javascript. Je vérifie Baidu lors de l'encodage, puis je donne un bon tutoriel sur les bases de JavaScript.
plaque
Le mot de passe PlayFair (anglais: Playfair Cipher ou Playfair Square) est un mot de passe de remplacement. Écrit sur la base d'une table de chiffre de 5 * 5 carrés, avec 25 lettres disposées dans le tableau. Pour les 26 lettres en anglais, supprimez le Z le plus couramment utilisé pour former une table de mot de passe.
Idées de mise en œuvre:
1. Préparer une liste de mots de passe
Une clé est un mot ou une phrase, et la table de mot de passe est réglée en fonction de la clé donnée par l'utilisateur. S'il y a des lettres en double, vous pouvez supprimer les lettres en double par la suite.
Par exemple, le chien fou clé peut être compilé dans
| C | O | H | M | T |
| R | G | je | N | U |
| UN | B | J | P | V |
| Y | E | K | Q | W |
| D | F | L | S | X |
La copie de code est la suivante:
/ *
* Fonction: Compilation de la liste des mots de passe
*
* Paramètres: clé (suppression de l'espace et traitement de la capitalisation)
*
* Retour: table de mot de passe
* /
function createKey (keychars) {
// Array alphabétique
var allchars = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', `` n '', 'o', 'p', ',', 'r', 's', '
// des keychars variables obtiennent la position de la lettre dans le tableau alphabétique et supprimez la lettre
pour (var i = 0; i <keychar.length; i ++) {
var index = allcharS.Indexof (keychars [i]);
if (index> -1) {
allchar.splice (index, 1);
}
}
// insérer les lettres dans le Keychar dans l'alphabet
pour (var i = keychar.length-1; i> = 0; i -) {
allchar.unshift (keychars [i]);
}
// insérer des keychars de la première colonne dans la table de mot de passe
pour (var i = 0; i <5; i ++) {
pour (var j = 0; j <5; j ++) {
Key [J] [i] = AllChars [i * 5 + j];
}
}
}
Étant donné que les caractères en double et Z doivent être supprimés lors de l'insertion de keychars dans la table de mot de passe, l'algorithme de conception est le suivant:
La copie de code est la suivante:
/ *
* Fonction: supprimez les lettres en double des chaînes
*
* Paramètres: chaînes qui doivent être traitées
*
* Retour: chaîne traitée
* /
fonction supprimé uplicate (str) {
var result = [], temptr = "";
var arr = str.split (''); // Divisez la chaîne en un tableau
//arr.sort() ;//sorting
pour (var i = 0; i <arr.length; i ++) {
var répéterback = true; // La variable de conception est de s'assurer que la partie précédente de la chaîne n'existe pas dans les mêmes caractères, car l'algorithme suivant ne peut que s'assurer que les mêmes caractères sont connectés ensemble
pour (var j = 0; j <result.length; j ++) {
if (arr [i] == résultat [j])
répéterback = false;
}
if (arr [i]! == TEMPSTR && répéterback) {
result.push (arr [i]);
Temptr = arr [i];
}autre{
continuer;
}
}
return result.join (""); // Convertir le tableau en chaîne
}
2. Organisez le texte clair
Faites une paire de deux lettres du texte brut. S'il y a deux lettres identiques à côté de l'autre par paires ou si la dernière lettre est célibataire, insérez une lettre X. Au début du codage, il n'était pas prévenant et refusait d'entrer le nombre de lettres comme singulières, ce qui a rendu l'expérience utilisateur pauvre.
var k = document.getElementById ("keychars"). valeur.touppercase (). remplacer (// s / ig, '');
Retirez les espaces et convertissez en majuscules pour le texte brut.
3. Écrivez un texte de chiffre
Règles de chiffrement en texte brut (de Baidu):
1) Si P1 P2 est sur la même ligne, le texte chiffré C1 C2 correspondant est la lettre proche de l'extrémité droite de P1 P2. La première colonne est considérée comme le côté droit de la dernière colonne. Par exemple, selon le tableau précédent, CT correspond à OC
2) Si P1 P2 est dans la même colonne, le texte chiffré C1 C2 correspondant est les lettres immédiatement en dessous de P1 P2. La première ligne est considérée comme en dessous de la dernière ligne.
3) Si P1 et P2 ne sont pas dans la même ligne et dans la même colonne, alors C1 et C2 sont des lettres aux deux autres coins du rectangle déterminées par P1 et P2 (comme pour le remplacement horizontal ou le remplacement vertical, vous devez prendre rendez-vous à l'avance, ou essayez-le vous-même). Selon le tableau précédent, Wh correspond à TK ou KT.
Par exemple, selon le tableau ci-dessus, le texte brut où il y a la vie, il y a de l'espoir.
Vous pouvez d'abord l'organiser en ce qui est il est li fe th er ei sh op ex
Alors le texte chiffré est: kt yg wo ok gy nl hj de cm yg kg lm mb wf
Transformez le texte chiffré en capital, puis organisez-le en groupes de plusieurs lettres.
Par exemple, dans un groupe de 5, Ktygw Ookgy Nlhjo Fcmyg Kglmm BWF
4. Décription
Remplissez une matrice 5 * 5 (répétez les lettres et lettres répétées), remplissez les positions restantes de la matrice dans l'ordre dans les positions restantes de la matrice et obtenez le texte brut à partir du texte chiffré selon la matrice de remplacement. Faire le contraire.
L'effet est comme indiqué sur la figure:
colline
Le mot de passe Hill est un mot de passe de remplacement qui utilise le principe de la théorie de la matrice de base. Écrit sur la base d'une table de chiffre de 5 * 5 carrés, avec 25 lettres disposées dans le tableau. Pour les 26 lettres en anglais, supprimez le Z le plus couramment utilisé pour former une table de mot de passe.
Idées de mise en œuvre:
1. Écrivez un alphabet
var chars = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', `` u ',', ',', ',' x '', 'z' '
2. Générer au hasard des clés
La copie de code est la suivante:
/ *
* Fonction: générer des clés au hasard
*
* Retour: matrice clé
* /
fonction randomCreateKey () {
// générer des nombres au hasard de 0 à 26
pour (var i = 0; i <3; i ++) {
pour (var j = 0; j <3; j ++) {
clé [i] [j] = math.round (math.random () * 100% 26)
}
}
}
3. Code de clé, traitez le texte brut en fonction de la touche générée automatiquement:
La copie de code est la suivante:
/ *
* Fonction: algorithme de colline
*
* Paramètres: tableau en majuscules avec des multiples de longueur 3
*
* Retour: chaîne cryptée
* /
Function Hill (P) {
// Lettres en majuscules texte chiffre
var res = "";
// Développez le nombre total de fois que la chaîne doit être traversée
var round = math.round (p.length / 3);
//traiter avec
pour (var b = 0; b <round; b ++) {
// Texte brut 3
var temp3 = "";
var temparr3 = [];
var sumarr3 = [];
pour (var i = 0; i <3; i ++) {
TEMPP3 + = P.Shift ();
pour (var j = 0; j <chars.length; j ++) {
if (temp3 [i] == Chars [j])
temparr3 [i] = j;
}
}
//calculer
pour (var i = 0; i <3; i ++) {
pour (var j = 0; j <3; j ++) {
sumarr3 [i] = (temparr3 [j] * key [i] [j])% 26;
}
}
// obtient l'indice correspondant des caractères dans l'alphabet
pour (var i = 0; i <3; i ++) {
res + = chars [surarr3 [i]];
}
}
return res;
};
L'effet est comme indiqué sur la figure:
Les algorithmes ci-dessus ont des lacunes:
1. Design orienté vers le processus, degré de couplage élevé
2. Trop de boucles imbriquées, l'efficacité des algorithmes doit être optimisée
3. Considération inadéquate des situations possibles, telles que le non-traitement lorsque l'utilisateur entre dans les caractères non alphabétiques.
Résumer:
Après avoir étudié le cours Introduction à la sécurité de l'information pendant un certain temps, je ne peux comprendre que les bases de la sécurité de l'information. La sécurité de l'information est un sujet très intéressant. Lorsque vous rencontrez des problèmes, pensez autant que possible, faites plus et utilisez plus. Dans le même temps, nous devons également renforcer l'accumulation de fondements mathématiques, consolider la Fondation JS et élargir les connaissances. Cette route a un long chemin à parcourir.