Maison >interface Web >js tutoriel >Comprenez rapidement l'utilisation du module crypto dans Nodejs dans un seul article

Comprenez rapidement l'utilisation du module crypto dans Nodejs dans un seul article

青灯夜游
青灯夜游avant
2021-07-13 16:33:425999parcourir

crypto est un module qui implémente le cryptage et le décryptage dans node.js. l'article Cet article vous présente le module crypto et présente les méthodes d'utilisation du module crypto pour effectuer des algorithmes de hachage (hachage), des algorithmes HMAC, un cryptage symétrique et un cryptage asymétrique.

Comprenez rapidement l'utilisation du module crypto dans Nodejs dans un seul article

1. crypto

crypto est un module qui implémente le cryptage et le déchiffrement dans node.js. Dans node.js, la bibliothèque de classes OpenSSL est utilisée comme moyen d'implémenter en interne le cryptage et le déchiffrement. OpenSSL est un outil de mise en œuvre d'algorithmes de cryptage et de déchiffrement fiable et rigoureusement testé. [Apprentissage recommandé : "tutoriel nodejs"] p>

Téléchargement openSSL de la version Windows

http://dl.pconline.com.cn/download/355862-1.html

2. Algorithme de hachage (hachage)

L'algorithme de hachage est également appelé algorithme de hachage. Il est utilisé pour transformer une entrée de n'importe quelle longueur en sortie de longueur fixe. Commun Il existe des md5 , sha1, etc.

  • La même entrée produira la même sortie
  • Une sortie différente produira des sorties différentes
  • Toute sortie de longueur d'entrée La longueur est la même chose
  • La valeur d'entrée ne peut pas être déduite de la sortie

Comprenez rapidement lutilisation du module crypto dans Nodejs dans un seul article

2.1 Obtenir tous les algorithmes de hachage

console.log(crypto.getHashes());

2.2 Description de la syntaxe

crypto.createHash(algorithm);//创建HASH对象
hash.update(data,[input_encoding]);//增加要添加摘要的数据,摘要输出前可以使用多次update
hash.digest([encoding]);//输出摘要内容,输出后则不能再添加摘要内容

2.3 Algorithme de hachage exemple

var crypto = require('crypto');
var md5 = crypto.createHash('md5');//返回哈希算法
var md5Sum = md5.update('hello');//指定要摘要的原始内容,可以在摘要被输出之前使用多次update方法来添加摘要内容
var result = md5Sum.digest('hex');//摘要输出,在使用digest方法之后不能再向hash对象追加摘要内容。
console.log(result);

Mises à jour multiples

var fs = require('fs');
var shasum = crypto.createHash('sha1');//返回sha1哈希算法
var rs = fs.createReadStream('./readme.txt');
rs.on('data', function (data) {
    shasum.update(data);//指定要摘要的原始内容,可以在摘要被输出之前使用多次update方法来添加摘要内容
});
rs.on('end', function () {
    var result = shasum.digest('hex');//摘要输出,在使用digest方法之后不能再向hash对象追加摘要内容。
    console.log(result);
})

3 Algorithme HMAC

L'algorithme HMAC combine. un algorithme de hachage avec une clé pour éviter d'endommager l'intégrité de la signature

Comprenez rapidement lutilisation du module crypto dans Nodejs dans un seul article

3.1 Syntaxe h3>
let hmac crypto.createHmac(algorithm,key);
hmac.update(data);
  • l'algorithme est un algorithme de résumé disponible, tel que sha1, md5, sha256
  • la clé est une chaîne utilisée pour spécifier une clé au format PEM
  • 3.2 Générer une clé privée

    PEM est le format standard d'OpenSSL OpenSSL utilise le format de fichier PEM pour stocker les certificats et les clés basés sur un certificat codé en Base64.

    $ openssl genrsa -out rsa_private.key 1024

    3.3 Exemple

    let pem = fs.readFileSync(path.join(__dirname, './rsa_private.key'));
    let key = pem.toString('ascii');
    let hmac = crypto.createHmac('sha1', key);
    let rs = fs.createReadStream(path.join(__dirname, './1.txt'));
    rs.on('data', function (data) {
        hmac.update(data);
    });
    rs.on('end', function () {
        let result = hmac.digest('hex');
        console.log(result);
    });

    4.

    • L'algorithme Blowfish est un algorithme de chiffrement symétrique signifie que la même clé est utilisée pour le chiffrement et le déchiffrement.

    3. jpg

    var crypto = require('crypto');
    var fs = require('fs');
    let str = 'hello';
    let cipher = crypto.createCipher('blowfish', fs.readFileSync(path.join(__dirname, 'rsa_private.key')));
    let encry = cipher.update(str, 'utf8','hex');
    encry += cipher.final('hex');
    console.log(encry);
    
    let deciper = crypto.createDecipher('blowfish', fs.readFileSync(path.join(__dirname, 'rsa_private.key')));
    let deEncry = deciper.update(encry, 'hex','utf8');
    deEncry += deciper.final('utf8');
    console.log(deEncry);

    5. Algorithme de chiffrement asymétrique

    • L'algorithme de chiffrement asymétrique nécessite deux clés : clé publique et clé privée
    • La clé publique et la clé privée forment une paire Si la clé publique est utilisée pour chiffrer des données, seule la clé privée correspondante peut être utilisée pour les déchiffrer, si la clé privée. est chiffré, seule la clé publique peut être déchiffrée
    • Comme le chiffrement et le déchiffrement utilisent deux clés différentes, cet algorithme est appelé algorithme de chiffrement asymétrique

    Comprenez rapidement lutilisation du module crypto dans Nodejs dans un seul article

    Créer une clé publique pour le privé key

    openssl rsa -in rsa_private.key -pubout -out rsa_public.key
    var crypto = require('crypto');
    var fs = require('fs');
    let key = fs.readFileSync(path.join(__dirname, 'rsa_private.key'));
    let cert = fs.readFileSync(path.join(__dirname, 'rsa_public.key'));
    let secret = crypto.publicEncrypt(cert, buffer);//公钥加密
    let result = crypto.privateDecrypt(key, secret);//私钥解密
    console.log(result.toString());

    6. Signature

    Dans le réseau, le propriétaire de la clé privée peut Avant qu'une donnée soit envoyées, les données sont signées et une signature est obtenue. Une fois les données envoyées au destinataire des données via le réseau, le destinataire des données peut utiliser la clé publique pour. signez-la. La signature est vérifiée pour garantir que ces données sont les données originales envoyées par le propriétaire de la clé privée et n'ont pas été modifiées lors de la transmission sur le réseau.

    Comprenez rapidement lutilisation du module crypto dans Nodejs dans un seul article

    let private = fs.readFileSync(path.join(__dirname, 'rsa_private.key'), 'ascii');
    let public = fs.readFileSync(path.join(__dirname, 'rsa_public.key'), 'ascii');
    let str = 'zhufengpeixun';
    let sign = crypto.createSign('RSA-SHA256');
    sign.update(str);
    let signed = sign.sign(private, 'hex');
    let verify = crypto.createVerify('RSA-SHA256');
    verify.update(str);
    let verifyResult = verify.verify(public,signed,'hex'); //true

    Adresse originale : https://juejin.cn/post/6844903800491376653

    Pour plus de connaissances sur la programmation, veuillez visiter : Vidéo de programmation ! !

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