Maison > interface Web > js tutoriel > le corps du texte

Javascript implémente les algorithmes de mot de passe Playfair et Hill_Connaissances de base

WBOY
Libérer: 2016-05-16 16:28:36
original
1601 Les gens l'ont consulté

Jusqu'à la fin du semestre, étudiez pour les devoirs sur l'introduction à la sécurité de l'information. Il m'est arrivé de rencontrer l'algorithme Playfair et l'algorithme Hill dans les algorithmes de cryptographie classiques. C'était intéressant de les implémenter en langage JavaScript. J'ai vérifié Baidu pendant le codage, et en passant, j'ai appris les bases de JavaScript.

foire aux jeux

Le chiffre Playfair (anglais : chiffre Playfair ou carré Playfair) est un chiffre de remplacement. Il est rédigé à partir d'un tableau de mots de passe composé d'un carré de 5*5, avec 25 lettres disposées dans le tableau. Pour les 26 lettres de l’anglais, le Z le plus couramment utilisé est supprimé pour former un tableau de mots de passe.

Idées de mise en œuvre :

1. Préparer le tableau des mots de passe

La clé est un mot ou une phrase, et le tableau des mots de passe est compilé en fonction de la clé donnée par l'utilisateur. S'il y a des lettres répétées, les lettres répétées suivantes peuvent être supprimées.

Si la clé est un chien fou, elle peut être compilée dans

C
O
H
M
T
R
G
Je
N
U
A
B
J
P
V
Y
E
K
Q
W
D
F
L
S
X

Copier le code Le code est le suivant :

/*
* Fonction : Préparer le tableau des mots de passe
*
* Paramètre : Clé (après suppression des espaces et mise en majuscule)
*
* Retour : Tableau des mots de passe
*/
fonction createKey(keychars){
//Tableau alphabétique
var allChars = ['A','B','C','D','E','F','G','H','I','J','K','L ','M','N','O','P','Q','R','S','T','U','V','W','X', 'Y'];
// Les keychars variables obtiennent la position de la lettre dans le tableau par ordre alphabétique, supprimez la lettre
pour(var i = 0 ;i          var index = allChars.indexOf(keychars[i]);
Si (index > -1) {
               allChars.splice(index, 1);
>
>
//Insérez les lettres du keychar dans l'alphabet
pour(var i = keychars.length-1;i>=0;i--){
         allChars.unshift(keychars[i]);
>
//Insérez les caractères clés dans la table des mots de passe à partir de la première colonne
pour(var je = 0; je<5; je){
pour(var j = 0; j<5 ;j ){
             clé[j][i] = allChars[i*5 j];
>
>

Considérez la nécessité de supprimer les caractères en double et Z lors de l'insertion de caractères clés dans la table des mots de passe. L'algorithme de conception est le suivant :

Copier le code Le code est le suivant :

/*
* Fonction : Supprimer les lettres répétées dans une chaîne
*
* Paramètre : Chaîne qui doit être traitée
*
* Retour : chaîne traitée
*/
fonction supprimerDuplicate(str){
var résultat = [],tempStr = "";
var arr = str.split('');//Diviser la chaîne en un tableau
​​​​ //arr.sort();//Tri
pour(var je = 0; je < arr.length; je ){
                  var repeatBack = true;//La variable de conception consiste à garantir que les mêmes caractères n'existent pas au début de la chaîne, car l'algorithme suivant ne peut garantir que les mêmes caractères sont connectés ensemble
pour(var j = 0;j Si(arr[i] == résultat[j])
                          repeatBack = false;
            }
Si(arr[i] !== tempStr && répétitionBack){
                   result.push(arr[i]);
                tempStr = arr[i];
               }autre{
                         continuer ;
            }
>
           return result.join("");//Convertir le tableau en chaîne
>

2. Organiser le texte brut

Formez une paire toutes les deux lettres du texte brut. S'il y a deux lettres identiques côte à côte dans une paire ou si la dernière lettre est une seule lettre, insérez un X. Le codage initial n’était pas réfléchi et l’utilisateur refusait avec force de saisir un nombre impair de lettres, ce qui entraînait une mauvaise expérience utilisateur.

var k = document.getElementById("keychars").value.toUpperCase().replace(/s/ig,'');
Supprimez les espaces et convertissez le texte brut en majuscules.

3. Écrivez le texte chiffré

Règles de cryptage en texte brut (de Baidu) :

1) Si p1 et p2 sont sur la même ligne, les textes chiffrés correspondants c1 et c2 sont les lettres immédiatement à droite de p1 et p2. La première colonne est considérée comme étant à droite de la dernière colonne. Par exemple, d'après le tableau précédent, ct correspond à oc
2) Si p1 et p2 sont dans la même colonne, les textes chiffrés correspondants c1 et c2 sont les lettres immédiatement en dessous de p1 et p2. La première ligne est considérée comme située en dessous de la dernière ligne.
3) Si p1 et p2 ne sont pas dans la même ligne ou colonne, alors c1 et c2 sont les lettres dans les deux autres coins du rectangle déterminés par p1 et p2 (comme pour un remplacement horizontal ou un remplacement vertical, vous devez prendre rendez-vous en avancez ou essayez-le vous-même). D'après le tableau précédent, wh correspond à tk ou kt.

Par exemple, selon le tableau ci-dessus, le texte clair là où il y a la vie, il y a l'espoir.
Il peut être organisé comme là où est la vie dans chaque magasin
Alors le texte chiffré est : kt yg wo ok gy nl hj de cm yg kg lm mb wf
Convertissez le texte chiffré en lettres majuscules et disposez les lettres en groupes.
Par exemple, un groupe de 5 est KTYGW OOKGY NLHJO FCMYG KGLMM BWF

4. Décryptage
La clé est remplie dans une matrice 5*5 (en supprimant les lettres répétées et la lettre z). Les autres lettres inutilisées dans la matrice sont remplies dans les positions restantes de la matrice dans l'ordre. Le texte en clair est obtenu à partir du texte chiffré selon la matrice de remplacement. . Faites le contraire.

L'effet est comme indiqué sur la figure :

colline

Hill Password est un chiffrement de substitution qui utilise les principes de la théorie matricielle de base. Il est rédigé à partir d'un tableau de mots de passe composé d'un carré de 5*5, avec 25 lettres disposées dans le tableau. Pour les 26 lettres de l’anglais, le Z le plus couramment utilisé est supprimé pour former un tableau de mots de passe.

Idées de mise en œuvre :

1, écris l'alphabet
var chars = ['A','B','C','D','E','F','G','H','I','J','K','L ','M','N','O','P','Q','R','S','T','U','V','W','X', 'Y', 'Z'];
2. Générez aléatoirement des clés

Copier le code Le code est le suivant :

/*
* Fonction : Générer aléatoirement une clé
*
* Retour : matrice de clés
*/
fonction randomCreateKey(){
// Génère aléatoirement des nombres de 0 à 26
pour(var je = 0;i<3;i ){
pour(var j = 0;j<3;j ){
               clé[i][j] = Math.round(Math.random()*100&)
>
>
>

3. Le code clé traite le texte brut en fonction de la clé générée automatiquement :

Copier le code Le code est le suivant :

/*
* Fonction : algorithme de colline
*
* Paramètre : tableau majuscule dont la longueur est un multiple de 3

* Retour : chaîne cryptée
*/
fonction colline(p){
//Texte chiffré des lettres majuscules
var res = "";
//Détermine le nombre total de fois où la chaîne doit être parcourue
var rond = Math.round(p.length/3);
//Traitement
pour(var b = 0;b //Texte brut 3
            var temp3 ="";
        var tempArr3 = [];
var sommeArr3 = [];
pour (var je = 0;i<3;i){
              temp3 = p.shift();
pour(var j = 0;j Si(temp3[i] == chars[j])
                   tempArr3[i] = j;
            }
>
                                                                                                                                           pour(var je =0;i<3;i){
pour(var j = 0;j<3;j ){
                 sumArr3[i] = (tempArr3[j]*key[i][j])&;
            }
>
//Obtenir l'index correspondant du caractère dans l'alphabet
pour(var je =0;i<3;i){
             res = chars[sumArr3[i]];
>
>
Retourner la résolution ;
};

L'effet est comme indiqué sur la figure :

L'algorithme ci-dessus présente des défauts :

1. Conception orientée processus, couplage élevé

2. Il y a trop de boucles imbriquées et l'efficacité de l'algorithme doit être optimisée

3. Prise en compte inadéquate des situations possibles, comme le non-traitement lorsque l'utilisateur saisit des caractères non alphabétiques.

Résumé :

Après avoir étudié le cours Introduction à la sécurité de l'information pendant un certain temps, je ne peux qu'effleurer la surface 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, vous devez y réfléchir autant que possible, le faire autant que possible et l'appliquer autant que possible. Dans le même temps, il est également nécessaire de renforcer l'accumulation de fondements mathématiques, de consolider les fondements de js et d'élargir les connaissances. Le chemin à parcourir est long et ardu.

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!