📜  Node.js crypto.generateKeyPairSync() 方法

📅  最后修改于: 2022-05-13 01:56:32.309000             🧑  作者: Mango

Node.js crypto.generateKeyPairSync() 方法

crypto.generateKeyPairSync() 方法是加密模块的内置应用程序编程接口,用于生成指定类型的新非对称密钥对。例如,目前支持的密钥类型有 RSA、DSA、EC、Ed25519、Ed448、X25519、X448 和 DH。此外,如果此处声明了选项的 publicKeyEncoding 或 privateKeyEncoding,则此函数的作用就像在其输出上调用了 keyObject.export()。否则,密钥的特定部分将作为 KeyObject 返回。
但是,建议使用强密码将公钥编码为“spki”,将私钥编码为“pkcs8”,以保持密码的机密性。

句法:

crypto.generateKeyPairSync( type, options )

参数:此方法接受上面提到的两个参数,如下所述:

  • type:它包含一个字符串,并且必须包含以下一种或多种算法: 'rsa'、'dsa'、'ec'、'ed25519'、'ed448'、'x25519'、'x448'或'dh' .
  • 选项:它是对象类型。它可以保存以下参数:
    1. 模数长度:它包含一个数字。它是以比特为单位的密钥大小,仅适用于 RSA 和 DSA 算法。
    2. publicExponent:它包含一个数字。它是 RSA 算法的公共指数。默认值为 0x10001。
    3. divisorLength:它包含一个数字。它是 DSA 算法中q的大小。
    4. namedCurve:它包含一个字符串。它是 EC 算法中要使用的曲线的名称。
    5. prime:它拥有一个缓冲区。它是 DH 算法的主要参数。
    6. primeLength:它包含一个数字。它是 DH 算法的素数长度(以比特为单位)。
    7. 生成器:它包含一个数字。它是DH算法的自定义生成器。它的默认值为 2。
    8. groupName:它包含字符串。它是 DH 算法的 Diffie-Hellman 组名。
    9. publicKeyEncoding:它包含一个字符串。
    10. privateKeyEncoding:它持有一个对象。

返回值:它返回给定类型的新非对称密钥对,即,它返回一个对象,该对象包括一个私钥和一个保存字符串、缓冲区和 KeyObject 的公钥。

下面的示例说明了在 Node.js 中使用crypto.generateKeyPairSync() 方法

示例 1:

// Node.js program to demonstrate the
// crypto.generateKeyPairSync() method
  
// Including generateKeyPairSync from crypto module
const { generateKeyPairSync } = require('crypto');
  
// Including publicKey and  privateKey from 
// generateKeyPairSync() method with its 
// parameters
const { publicKey, privateKey } = generateKeyPairSync('ec', {
  namedCurve: 'secp256k1',    // Options
  publicKeyEncoding: {
    type: 'spki',
    format: 'der'
  },
  privateKeyEncoding: {
    type: 'pkcs8',
    format: 'der'
  }
});
  
// Prints asymmetric key pair
console.log("The public key is: ", publicKey);
console.log();
console.log("The private key is: ", privateKey);

输出:

The public key is: 

The private key is:  Buffer 30 81 84 02 01 00 30
10 06 07 2a 86 48 ce 3d 02 01 06 05 2b 81 04 00
0a 04 6d 30 6b 02 01 01 04 20 50 4a 87 c3 8c
968f 2b 41 f8 66 99 8a 95 ae 45 75 ... >

示例 2:

// Node.js program to demonstrate the
// crypto.generateKeyPairSync() method
  
// Including generateKeyPairSync from crypto module
const { generateKeyPairSync } = require('crypto');
  
// Including publicKey and  privateKey from 
// generateKeyPairSync() method with its 
// parameters
const { publicKey, privateKey } = generateKeyPairSync('dsa', {
  modulusLength: 570,
  publicKeyEncoding: {
    type: 'spki',
    format: 'der'
  },
  privateKeyEncoding: {
    type: 'pkcs8',
    format: 'der'
  }
});
  
// Prints asymmetric key pair after encoding
console.log("The public key is: ", 
         publicKey.toString('base64'));
console.log();
console.log("The private key is: ",
         privateKey.toString('base64'));

输出:

The public key is:  MIIBETCBwAYHKoZIzjgEATCBtAJJAM6084jk1Y6s/0sWQCs3k59AjV1GgAHb8gmB+Lxd/YVid+GySyss8tqhVQl49xho1DHoeJMNsVO6mcRqaSlSCPgmzqGaOvn2mQIdAKL5nGKJjDZF8Pb1SVvwWivhPShJiiHC2JjgrN8CSAqhzmg26/kEHYTZ3yNEGuguDhLvMAPdVG9pjTahLBytn8JQa3yQwLuPB4MzKfJ4d0pvKVZVnkMsatUe2ZkjnKoCjGlzwggd+QNMAAJJAMvsOBUjUKLhpkw4FZP7LIz0yYyOV1yYy84t8qSO42Yf6sNUfK6INnkFbpLHjFLcaDkFPqE5oRCIUqIVOhH0I7jNcGCN2m+ZWg==

The private key is:  MIHnAgEAMIHABgcqhkjOOAQBMIG0AkkAzrTziOTVjqz/SxZAKzeTn0CNXUaAAdvyCYH4vF39hWJ34bJLKyzy2qFVCXj3GGjUMeh4kw2xU7qZxGppKVII+CbOoZo6+faZAh0AovmcYomMNkXw9vVJW/BaK+E9KEmKIcLYmOCs3wJICqHOaDbr+QQdhNnfI0Qa6C4OEu8wA91Ub2mNNqEsHK2fwlBrfJDAu48HgzMp8nh3Sm8pVlWeQyxq1R7ZmSOcqgKMaXPCCB35BB8CHQChh8yXsr/3dx3OdV6JmIWPcHe6dTHh6IOEIHer

这里使用了“dsa”键类型。

参考: https://nodejs.org/api/crypto.html#crypto_crypto_generatekeypairsync_type_options