Maison  >  Article  >  interface Web  >  Comment créer un hachage à partir d’une chaîne en JavaScript ?

Comment créer un hachage à partir d’une chaîne en JavaScript ?

WBOY
WBOYavant
2023-08-25 15:49:041344parcourir

如何在 JavaScript 中从字符串创建哈希?

Avant de commencer, comprenons le hachage en JavaScript. Une valeur de hachage est également une chaîne, mais elle est chiffrée à l'aide d'un algorithme spécifique. Habituellement, nous utilisons des hachages à des fins de sécurité.

Par exemple, Google stocke les e-mails et les mots de passe des utilisateurs dans leur base de données. Désormais, les employés de Google peuvent accéder à leur base de données à des fins de développement. Mais peuvent-ils obtenir l'e-mail et le mot de passe de l'utilisateur à partir de la base de données ? Non, car les mots de passe sont stockés sous forme hachée et pour déchiffrer le mot de passe, l'employé a besoin de la clé que nous avons utilisée lors de la création du hachage à partir de la chaîne du mot de passe.

Ainsi, de cette façon, nous pouvons convertir les données au format de hachage. Chaque fois que nous devons comparer les données originales avec de nouvelles données, nous pouvons utiliser le même algorithme pour convertir les nouvelles données en une valeur de hachage et les comparer avec la valeur de hachage des données originales. Nous apprendrons comment créer un hachage à partir d'une chaîne en JavaScript.

Créez un algorithme pour convertir une chaîne en hachage

Dans cette méthode, nous allons créer une fonction personnalisée pour générer une valeur de hachage à partir d'une chaîne. Nous prendrons la valeur ASCII de chaque caractère de chaîne, effectuerons certaines opérations comme la multiplication, l'addition, la soustraction, OU, etc. et en générerons un hachage.

Grammaire

Les utilisateurs peuvent générer des hachages à partir de chaînes en suivant la syntaxe suivante.

for (let character of str) {
   let charCode = character.charCodeAt(0);
   hashString = hashString << 5 – hashString + charCode;
   hashString |= hashString;
}

Dans la syntaxe ci-dessus, hashstring contient la valeur de hachage finale de la chaîne str.

Algorithme

  • Étape 1 - Initialisez la variable hashString à zéro.

  • Étape 2 - Utilisez une boucle for-of pour parcourir la chaîne.

  • Étape 3 - Dans la boucle for-of, obtenez la valeur ASCII de chaque caractère.

  • Étape 4 - Après cela, décalez hashString vers la gauche de 5, multipliez par 31 et soustrayez-en hashString.

  • Étape 5 - Ajoutez la valeur ASCII du caractère chaîne à la variable hashString.

  • Étape 6 - Effectuez une opération OU sur la valeur de la variable hashString et elle-même.

  • Étape 7 - Une fois toutes les itérations de la boucle for terminées, nous obtenons la valeur de hachage finale de l'entier 32 bits.

Exemple 1

Dans l'exemple ci-dessous, nous avons pris différentes chaînes pour générer leurs hachages. Nous avons créé la fonction convertToHash() qui prend une chaîne comme paramètre et implémente l'algorithme ci-dessus pour la convertir en valeur de hachage.

Les utilisateurs peuvent observer la valeur entière de 32 bits représentant la valeur de hachage dans la sortie. De plus, on peut observer qu'il génère toujours la même valeur de hachage pour la même chaîne.

<html>
<body>
   <h2>Creating the <i> custom hash function </i> to convert string to hash</h2>
   <div id = "output"> </div>
   <script>
      let output = document.getElementById('output');
      function convertToHash(str) {
         if (str == "") return 0;
         let hashString = 0;
         for (let character of str) {
            let charCode = character.charCodeAt(0);
            hashString = hashString << 5 - hashString;
            hashString += charCode;
            hashString |= hashString;
         }
         output.innerHTML += "The original string is " + str + "<br/>";
         output.innerHTML += "The hash string related to original string is " + hashString + "<br/>";
         return hashString;
      }
      convertToHash("Hello Users");
      convertToHash("TutorialsPoint");
   </script>
</body>
</html>

Exemple 2

Dans l'exemple ci-dessous, nous avons implémenté l'algorithme ci-dessus pour convertir une chaîne en hachage, mais nous avons utilisé la méthode de réduction au lieu d'une boucle for. Nous utilisons la méthode split() pour convertir la chaîne en un tableau de caractères.

Après cela, nous avons utilisé la méthode réduire() et avons passé la fonction de rappel comme premier paramètre et 0 comme deuxième paramètre, représentant la valeur initiale de la variable de hachage. Dans la fonction de rappel, nous générons la valeur de hachage en utilisant la valeur ASCII de chaque caractère.

<html>
<body>
   <h2>Using the <i> reduce() method </i> to convert string to hash</h2>
   <div id = "output"> </div>
   <script>
      let output = document.getElementById('output');
      function hashUsingReduce(string) {
         if (string == "") return 0;
         let charArray = string.split('');
         let hash = charArray.reduce((hash, char) => ((hash << 5 - hash) + char.charCodeAt(0)) | hash, 0);
         output.innerHTML += "The original string is " + string + "<br/>";
         output.innerHTML += "The hash string related to original string is " + hash + "<br/>";
         return hash;
      }
      hashUsingReduce("JavaScript");
      hashUsingReduce("TypeScript");
   </script>
</body>
</html>

Utilisation du package NPM crypto-js

Crpyo-js est un package Npm qui contient diverses méthodes pour générer des hachages à partir de chaînes. Il contient également des algorithmes pour décrypter les messages.

Les utilisateurs doivent installer le package crypto-js npm dans leur projet de nœud à l'aide de la commande suivante.

npm i crypto-js

Grammaire

Les utilisateurs peuvent suivre la syntaxe suivante pour importer et utiliser le package crypto-js pour le cryptage et le déchiffrement.

var ciphertext = CryptoJS.AES.encrypt('string', 'secret key').toString();

Dans la syntaxe ci-dessus, nous avons utilisé la méthode encrypt() du module AES du package cryptoJS.

Paramètres

  • String - Il s'agit d'un message ou de données au format chaîne et est utilisé pour générer un hachage.

  • La clé secrète est la clé secrète que l'algorithme utilisera lors de la génération du hachage. Aussi complexe que soit le hachage, il produira un texte crypté plus sécurisé.

Exemple 3

Nous avons importé le package crypto-js dans le fichier NodeJs dans l'exemple ci-dessous. Après cela, nous accédons au module AES de CryptoJs et générons le hachage à partir de la chaîne à l'aide de la méthode encrypt().

Les utilisateurs peuvent observer les valeurs de hachage générées à l'aide de l'algorithme AES dans la sortie.

var CryptoJS = require("crypto-js");
// Encrypt
var encryptedText = CryptoJS.AES.encrypt('Your Welcome!', 'This is my Secret').toString();
console.log("The hash string is " + encryptedText);

Sortie

"The hash string is U2FsdGVkX19br0LjrHteC9+dlP2PS9dVT03IrTc9zwQ="

Ce tutoriel nous apprend deux façons de générer des hachages à partir de chaînes ou de données. La première méthode est simple et crypte le texte sans aucune clé. Nous ne pouvons donc pas l’utiliser dans le développement réel.

Le package CryptoJs contient divers modules pour divers algorithmes. Nous pouvons utiliser une méthode de cryptage avec n’importe quel algorithme utilisant également une clé de cryptage. Par conséquent, même si vous connaissez l’algorithme mais pas la clé, vous ne pouvez pas déchiffrer le texte chiffré.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer