La cryptographie est la pratique qui consiste à sécuriser les communications et les données en les convertissant dans des formats que seules les parties autorisées peuvent déchiffrer.
Le Node.js crypto est un module intégré qui fournit des fonctionnalités cryptographiques aux applications Node.js. Il offre une gamme de capacités cryptographiques, notamment le chiffrement, le déchiffrement, le hachage, les signatures numériques, la génération sécurisée de nombres aléatoires, etc.
Vous explorerez ici les différentes applications du module cryptographique de Node.js et la manière dont vous pouvez les utiliser pour sécuriser vos applications.
Hachage
Le hachage est une technique cryptographique à sens unique qui permet de transformer une clé ou une chaîne donnée en un résultat de taille fixe appelé hachage ou condensé.
Le hachage est une fonction à sens unique, ce qui signifie que lorsque vous hachurez une clé ou une chaîne, vous ne pouvez pas obtenir la valeur originale à partir du hachage généré.
Le module cryptographique de Node.js prend en charge diverses fonctions de hachage telles que SHA-256, SHA-512, MD5, etc.
Vous pouvez hacher des données à l’aide de la fonction createHash qui prend l’algorithme de hachage comme argument. La méthode renvoie un Hash que vous pouvez utiliser pour hacher les données à l’aide de la méthode mise à jour et condensé méthodes.
Par exemple :
const crypto = require('crypto');
const data = "password";
// creating hash object
const hashAlgo = crypto.createHash('sha256')
// passing the data to be hashed
hashAlgo.update(data);
// Creating the hash in the required format
const hash = hashAlgo.digest('hex');
console.log(`Hash: ${hash}`);
Dans l’exemple ci-dessus, le module cryptographique createHash a créé un objet de hachage avec la méthode sha256 algorithme de hachage. L’algorithme mise à jour de l’objet de hachage prend les données d’entrée et les hache. Ensuite, la méthode digest prend un paramètre d’encodage, spécifiant le format de la valeur de hachage de sortie, et renvoie le hachage dans le format spécifié (hexadécimal).
Le hachage est utile pour vérifier l’intégrité des données, le stockage des mots de passe, les signatures numériques, etc.
Générer des données aléatoires
Des données aléatoires sécurisées sur le plan cryptographique sont souvent nécessaires dans les domaines de la cryptographie, des jeux et des tests pour divers cas d’utilisation.
En cryptographie, vous pouvez utiliser des données aléatoires pour générer des clés, des sels et des vecteurs d’initialisation pour les algorithmes de cryptage et de décryptage.
Dans les jeux, vous pouvez utiliser des données aléatoires pour générer des niveaux de jeu, des personnages, des objets, etc. afin d’empêcher la tricherie et de garantir que le jeu n’est pas prévisible.
Dans les tests, vous pouvez les utiliser pour simuler des scénarios du monde réel et des cas extrêmes.
Vous pouvez générer des données aléatoires à l’aide du module cryptographique Node.js randomBytes Méthode de calcul du nombre d’octets. Cette méthode prend un nombre comme argument et renvoie un tampon d’octets aléatoires.
Ce nombre représente la taille des octets que la méthode va générer. Cependant, le nombre ne doit pas être supérieur à 2³¹ – 1 (2147483647), qui est la valeur maximale pouvant être représentée par un entier signé de 32 bits.
Par exemple :
const crypto = require("crypto");
// create random bytes
const randomBytes = crypto.randomBytes(32);
// convert to hex
const randomString = randomBytes.toString("hex");
console.log(randomString); //logs random string to the console
Le bloc de code ci-dessus génère et enregistre une chaîne aléatoire de 64 caractères hexadécimaux (32 octets) sur la console.
La génération de données aléatoires sécurisées sur le plan cryptographique est importante car elle garantit que les données aléatoires ne sont pas prévisibles et que les attaquants ne peuvent pas les manipuler ou les deviner.
Cryptage et décryptage en Node.js
Le chiffrement est le processus de transformation d’un texte clair en une forme illisible (texte chiffré) à l’aide d’un algorithme de chiffrement et d’une clé secrète.
Le décryptage est l’inverse du cryptage. Il s’agit de reconvertir le texte chiffré en texte clair en utilisant le même algorithme de chiffrement et la même clé.
Le module cryptographique de Node.js prend en charge divers algorithmes de chiffrement et de déchiffrement, notamment AES (Advanced Encryption Standard), DES (Data Encryption Standard) et RSA (Rivest-Shamir-Adleman).
Comment chiffrer des données dans Node.js à l’aide du module crypto
Vous pouvez crypter des données en utilisant le module crypto.createCipheriv() qui prend en entrée l’algorithme de chiffrement, la clé secrète et un vecteur d’initialisation. La clé secrète dépend de l’algorithme de chiffrement utilisé. Par exemple, pour l’algorithme aes-256 de la méthode CBC la longueur de la clé doit être de 32 octets.
La méthode renvoie un Chiffre que vous pouvez utiliser pour crypter les données à l’aide de l’objet update() et final() Les méthodes de chiffrement. Les données chiffrées sont généralement représentées sous la forme d’une chaîne hexadécimale ou d’un tampon.
Par exemple :
const crypto = require("crypto");
// Generate a secret key for encryption and decryption.
const secretKey = crypto.randomBytes(32);
// Generate an initialization vector
const iv = crypto.randomBytes(16);
// data to be encrypted
const plainText = "This is a secret message";
// create cipher object
const cipher = crypto.createCipheriv("aes-256-cbc", secretKey, iv);
// encrypt the data
let encryptedText = cipher.update(plainText, "utf-8", "hex");
// finalize the encryption
encryptedText += cipher.final("hex");
console.log(encryptedText);
L’exemple ci-dessus montre comment vous pouvez crypter du texte en clair à l’aide de aes-256 en mode CBC à l’aide du module crypto. Il génère une clé secrète et un vecteur d’initialisation à l’aide de la fonction crypto.randomBytes . Il crée ensuite un objet de chiffrement à l’aide de la méthode crypto.createCipheriv et crypte le message en texte clair à l’aide de la méthode cipher.update et cryptogramme.final méthodes.
Le résultat est une chaîne hexadécimale du message crypté, que vous pouvez décrypter en utilisant la même clé secrète et le même IV.
Comment décrypter des données dans Node.js en utilisant le module crypto
Vous pouvez déchiffrer des données cryptées en utilisant la fonction crypto.createDecipheriv() qui prend en entrée l’algorithme de décryptage, la clé secrète et un vecteur d’initialisation. La méthode renvoie un Déchiffrer que vous pouvez utiliser pour décrypter les données à l’aide de la fonction Decipher.update() et Déchiffrer.final() méthodes.
Par exemple :
// create Decipher object
const decipher = crypto.createDecipheriv("aes-256-cbc", secretKey, iv);
// decrypt the data
let decryptedText = decipher.update(encryptedText, "hex", "utf-8");
// finalize the decryption
decryptedText += decipher.final("utf-8");
console.log(decryptedText); // This is a secret message
L’exemple ci-dessus montre comment vous pouvez déchiffrer des données chiffrées en utilisant le même algorithme, la même clé secrète et le même vecteur d’initialisation que pour le chiffrement.
Il crée un objet Déchiffrer à l’aide de la méthode crypto.createDecipheriv . Il décrypte ensuite les données à l’aide de la méthode decipher.update qui prend comme arguments les données, le codage d’entrée et le codage de sortie. Enfin, il termine le processus de décryptage à l’aide de la méthode decipher.final méthode. L’appel à cette méthode garantit que l’objet Decipher ne peut plus être utilisé pour déchiffrer des données. Le résultat est une chaîne de texte en clair.
Le chiffrement et le déchiffrement sont essentiels pour protéger les données sensibles et maintenir leur confidentialité. Ils ont de nombreuses applications concrètes dans le commerce électronique, les services bancaires en ligne, le stockage de données, etc.
Autres applications du module cryptographique Node.js
Outre le hachage, la génération de données aléatoires cryptographiquement sûres et le chiffrement et le déchiffrement, vous pouvez également utiliser le module crypto de Node.js pour signer et vérifier les signatures numériques, ce qui permet de vérifier l’authenticité et l’intégrité des documents numériques. En outre, vous pouvez utiliser le module cryptographique pour sécuriser les flux de transmission de données afin d’empêcher la falsification des données et l’écoute clandestine pendant la transmission.