當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Node.js crypto.generateKeyPair()用法及代碼示例


crypto.generateKeyPair()方法是加密模塊的內置應用程序編程接口,用於生成指定類型的新非對稱 key 對。例如,當前支持的 key 類型是RSA,DSA,EC,Ed25519,Ed448,X25519,X448和DH。此外,如果在此說明了選項的publicKeyEncoding或privateKeyEncoding,則此函數的作用就好像在其輸出上調用了keyObject.export()一樣。否則,鍵的特定部分將作為KeyObject返回。但是,建議使用long-term存儲的加密方式將公共 key 編碼為“ spki”,將私有 key 編碼為“ pkcs8”。

用法:

crypto.generateKeyPair( type, options, callback )

參數:此方法接受上述和以下所述的三個參數:



  • type:它包含一個字符串,並且必須包含以下一種或多種算法:“ rsa”,“ dsa”,“ ec”,“ ed25519”,“ ed448”,“ x25519”,“ x448”或“ dh”。
  • options:是對象類型。它可以包含以下參數:
    1. modulusLength:它包含一個數字。它是以位為單位的 key 大小,僅適用於RSA和DSA算法。
    2. publicExponent:它包含一個數字。它是RSA算法的公有 index 。默認情況下,其值為0x10001。
    3. divisorLength:它包含一個數字。它是DSA算法中q的大小(以位為單位)。
    4. namedCurve:它包含一個字符串。它是EC算法中要使用的曲線的名稱。
    5. prime:它擁有一個緩衝區。它是DH算法的主要參數。
    6. primeLength:它包含一個數字。它是DH算法的素數長度(以位為單位)。
    7. generator:它包含一個數字。它是DH算法的自定義生成器。其默認值為2。
    8. groupName:它保存字符串。這是DH算法的Diffie-Hellman組名。
    9. publicKeyEncoding:它包含一個字符串。
    10. privateKeyEncoding:它擁有一個對象。
  • callback:它是一個帶有參數publicKey,privateKey和err的函數。
    1. err:持有一個錯誤。
    2. publicKey:它包含一個字符串,緩衝區或KeyObject。
    3. privateKey:保存字符串,緩衝區或KeyObject。

返回值:它返回給定類型的新非對稱 key 對。

以下示例說明了Node.js中crypto.generateKeyPair()方法的使用:

範例1:

// Node.js program to demonstrate the 
// crypto.generateKeyPair() method 
  
// Including generateKeyPair from crypto module 
const { generateKeyPair } = require('crypto'); 
  
// Calling generateKeyPair() method 
// with its parameters 
generateKeyPair('rsa', { 
  modulusLength:530,    // options 
  publicExponent:0x10101, 
  publicKeyEncoding:{ 
    type:'pkcs1', 
    format:'der'
  }, 
  privateKeyEncoding:{ 
    type:'pkcs8', 
    format:'der', 
    cipher:'aes-192-cbc', 
    passphrase:'GeeksforGeeks is a CS-Portal!'
  } 
}, (err, publicKey, privateKey) => { // Callback function 
       if(!err) 
       { 
         // Prints new asymmetric key pair 
         console.log("Public Key is:", publicKey); 
         console.log(); 
         console.log("Private Key is:", privateKey); 
       } 
       else
       { 
         // Prints error 
         console.log("Errr is:", err); 
       } 
         
  });

輸出:

Public Key is:<Buffer 30 4a 02 43 03 12 b9
4c 1a 3f 96 07 51 c6 31 02d7 11 e2 e3 a5 2b 0c
7c 18 55 88 39 04 4c 86 e2 77 c4 29 47 82 2c 5b
4b 9e f3 e8 83 4b 5d 4b 31 e7 d5 ... >

Private Key is:<Buffer 30 82 01 cd 30 57 06
09 2a 86 48 86 f7 0d 01 050d 30 4a 30 29 06 09
2a 86 48 86 f7 0d 01 05 0c 30 1c 04 08 e0 31 2b
a0 38 82 e1 db 02 02 08 00 30 0c ... >

範例2:

// Node.js program to demonstrate the 
// crypto.generateKeyPair() method 
  
// Including generateKeyPair from crypto module 
const { generateKeyPair } = require('crypto'); 
  
// Calling generateKeyPair() method 
// with its parameters 
generateKeyPair('ec', { 
  namedCurve:'secp256k1',   // Options 
  publicKeyEncoding:{ 
    type:'spki', 
    format:'der'
  }, 
  privateKeyEncoding:{ 
    type:'pkcs8', 
    format:'der'
  } 
}, 
 (err, publicKey, privateKey) => { // Callback function 
       if(!err) 
       { 
         // Prints new asymmetric key 
         // pair after encoding 
         console.log("Public Key is:", 
                  publicKey.toString('hex')); 
         console.log(); 
         console.log("Private Key is:", 
                 privateKey.toString('hex')); 
       } 
       else
       { 
         // Prints error 
         console.log("Errr is:", err); 
       } 
         
  });

輸出:

Public Key is: 3056301006072a8648ce3d020106052b8104000a0342000499c5f442c3264bcdfb093b0bc820e3f0f6546972856ebec2f8ccc03f49abdb47ffcfcaf4f37e0ec53050760e74014767e30a8a3e891f4db8c83fa27627898f15

Private Key is: 308184020100301006072a8648ce3d020106052b8104000a046d306b0201010420326b340a964512bfc3e010850ff05e077b2f016fce9eded11f40643e4231efc4a1440342000499c5f442c3264bcdfb093b0bc820e3f0f6546972856ebec2f8ccc03f49abdb47ffcfcaf4f37e0ec53050760e74014767e30a8a3e891f4db8c83fa27627898f15

參考: https://nodejs.org/api/crypto.html#crypto_crypto_generatekeypair_type_options_callback




相關用法


注:本文由純淨天空篩選整理自nidhi1352singh大神的英文原創作品 Node.js | crypto.generateKeyPair() Method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。