NestJS Logo
ads via Carbon Design and Development tips in your inbox. Every weekday. ads via Carbon

Chiffrement et hachage

Le chiffrement est le processus d'encodage des informations. Ce processus convertit la représentation originale de l'information, connue sous le nom de texte en clair, en une forme alternative connue sous le nom de texte chiffré. Idéalement, seules les parties autorisées peuvent déchiffrer un texte chiffré en texte clair et accéder à l'information d'origine. Le chiffrement n'empêche pas en soi les interférences, mais refuse le contenu intelligible à un intercepteur potentiel. Le chiffrement est une fonction bidirectionnelle ; ce qui est chiffré peut être déchiffré avec la clé appropriée.

Le hachage est le processus de conversion d'une clé donnée en une autre valeur. Une fonction de hachage est utilisée pour générer la nouvelle valeur selon un algorithme mathématique. Une fois le hachage effectué, il devrait être impossible de passer de la sortie à l'entrée.

Chiffrement#

Node.js fournit un module cryptographique intégré que vous pouvez utiliser pour chiffrer et déchiffrer des chaînes, des nombres, des buffers, des flux, etc. Nest lui-même ne fournit aucun package supplémentaire au-dessus de ce module afin d'éviter d'introduire des abstractions inutiles.

A titre d'exemple, utilisons l'algorithme AES (Advanced Encryption System) 'aes-256-ctr' en mode de cryptage CTR.


import { createCipheriv, randomBytes, scrypt } from 'crypto';
import { promisify } from 'util';

const iv = randomBytes(16);
const password = 'Password used to generate key';

// La longueur de la clé dépend de l'algorithme.
// Dans ce cas, pour aes256, il s'agit de 32 octets.
const key = (await promisify(scrypt)(password, 'salt', 32)) as Buffer;
const cipher = createCipheriv('aes-256-ctr', key, iv);

const textToEncrypt = 'Nest';
const encryptedText = Buffer.concat([
  cipher.update(textToEncrypt),
  cipher.final(),
]);
Attention Un même vecteur d'initialisation (IV) ne doit pas être réutilisé pour chiffrer plusieurs messages avec une même clé

Il faut maintenant décrypter la valeur encryptedText :


import { createDecipheriv } from 'crypto';

const decipher = createDecipheriv('aes-256-ctr', key, iv);
const decryptedText = Buffer.concat([
  decipher.update(encryptedText),
  decipher.final(),
]);

Hachage#

Pour le hachage, nous recommandons d'utiliser les packages bcrypt ou argon2. Nest lui-même ne fournit pas d'enveloppe supplémentaire au-dessus de ces modules afin d'éviter d'introduire des abstractions inutiles (ce qui rend la courbe d'apprentissage courte).

Par exemple, utilisons bcrypt pour hacher un mot de passe aléatoire.

Installez d'abord les packages nécessaires :


$ npm i bcrypt
$ npm i -D @types/bcrypt

Une fois l'installation terminée, vous pouvez utiliser la fonction hash, comme suit :


import * as bcrypt from 'bcrypt';

const saltOrRounds = 10;
const password = 'random_password';
const hash = await bcrypt.hash(password, saltOrRounds);

Pour générer un salt, utilisez la fonction genSalt :


const salt = await bcrypt.genSalt();

Pour comparer/vérifier un mot de passe, utilisez la fonction compare :


const isMatch = await bcrypt.compare(password, hash);

Vous pouvez en savoir plus sur les fonctions disponibles ici.

Soutenez-nous

Nest est un projet open source sous licence MIT. Il peut se développer grâce au soutien de ces personnes formidables. Si vous souhaitez les rejoindre, apprenez-en plus ici.

Sponsors Principaux

Trilon LogoMarblism LogoMojam LogoAmplication Logo

Sponsors / Partenaires

Devenir un sponsor