109 votes

Comment chiffrer les données qui doivent être déchiffrées en node.js ?

Nous utilisons bcrypt pour hacher les mots de passe et les données qui ne doivent jamais être décryptées. Que devrions-nous faire pour protéger les autres informations utilisateur qui nécessitent d'être décryptées ?

Par exemple, supposons que nous ne voulions pas que le vrai nom d'un utilisateur soit en texte brut au cas où quelqu'un obtiendrait un accès à la base de données. Il s'agit de données quelque peu sensibles mais qui doivent également être consultées de temps en temps et affichées en texte brut. Existe-t-il un moyen simple de faire cela ?

1voto

Zaid Khan Points 15

Cela m'a aidé pour TypeScript et aes256 en utilisant createCipheriv. Référence.

Encrypt.ts

import * as crypto from "crypto";

export class Encrypter {
  static algorithm = "aes256";
  static key = crypto.scryptSync("", "salt", 32);

  static encrypt(clearText) {
    const iv = crypto.randomBytes(16);
    try {
      const cipher = crypto.createCipheriv(
        Encrypter.algorithm,
        Encrypter.key,
        iv
      );
      const encrypted = cipher.update(clearText, "utf8", "hex");
      return [
        encrypted + cipher.final("hex"),
        Buffer.from(iv).toString("hex"),
      ].join("|");
    } catch (error) {
      return error;
    }
  }

  static decrypt(encryptedText) {
    try {
      const [encrypted, iv] = encryptedText.split("|");
      if (!iv) throw new Error("IV not found");
      const decipher = crypto.createDecipheriv(
        Encrypter.algorithm,
        Encrypter.key,
        Buffer.from(iv, "hex")
      );
      return decipher.update(encrypted, "hex", "utf8") + decipher.final("utf8");
    } catch (error) {
      return error;
    }
  }
}

Utilisation:

//Cryptage
const encryptedPassword = Encrypter.encrypt("MotDePasse");

//Décryptage, Remarque : Vous devez fournir la valeur cryptée pour la décrypter
const decryptedPassword = Encrypter.decrypt(encryptedPassword);

1voto

Willian Points 1334

La manière la plus simple d'y parvenir est d'utiliser un package appelé cryptr.

Cela peut être fait très rapidement, comme suit:

// npm install cryptr

const Cryptr = require('cryptr');
const cryptr = new Cryptr('maCléSecrète');

const chaineCryptée = cryptr.encrypt('bacon');
const chaineDécryptée = cryptr.decrypt(chaineCryptée);

console.log(chaineCryptée); // 2a3260f5ac4754b8ee3021ad413ddbc11f04138d01fe0c5889a0dd7b4a97e342a4f43bb43f3c83033626a76f7ace2479705ec7579e4c151f2e2196455be09b29bfc9055f82cdc92a1fe735825af1f75cfb9c94ad765c06a8abe9668fca5c42d45a7ec233f0
console.log(chaineDécryptée); // bacon

Crédits à Maurice Butler qui a développé cette librairie.

0voto

Pour des cryptages de valeurs multiples sur la même page, nous devons créer des Cipheriv séparés comme ci-dessous avec un iv statique :

const iv = 'xxxx';   /* remplacez par votre iv */

const cipher1 = crypto.createCipheriv(algorithme, clé, iv);
var encrypted1 = cipher1.update(val1, 'utf8', 'hex') + cipher1.final('hex');            // texte crypté

const cipher2 = crypto.createCipheriv(algorithme, clé, iv);
var encrypted2 = cipher2.update(val2, 'utf8', 'hex') + cipher2.final('hex');        // texte crypté

const cipher3 = crypto.createCipheriv(algorithme, clé, iv);
var encrypted3 = cipher3.update(val3, 'utf8', 'hex') + cipher3.final('hex');        // texte crypté

-3voto

ngCourse Points 654
var crypto = require('crypto'),
algorithme = 'aes-256-ctr',
motDePasse = 'RJ23edrf';

//Ici "aes-256-cbc" est le standard de chiffrement avancé que nous utilisons pour le chiffrement.

function encrypter(texte){
    var chiffreur = crypto.createCipher(algorithme, motDePasse)
    var chiffre = chiffreur.update(texte,'utf8','hex')
    chiffre += chiffreur.final('hex');
    return chiffre;
}

function decrypter(texte){
    var dechiffreur = crypto.createDecipher(algorithme, motDePasse)
    var dec = dechiffreur.update(texte,'hex','utf8')
    dec += dechiffreur.final('utf8');
    return dec;
}

var sel = uuid.v4()

var e = encrypter();
console.log(e);
var d = decrypter(e);
console.log(d);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X