📜  Node.js crypto.generateKeyPairSync() 方法(1)

📅  最后修改于: 2023-12-03 15:03:12.498000             🧑  作者: Mango

Node.js crypto.generateKeyPairSync() 方法

简介

crypto.generateKeyPairSync() 方法是 Node.js 中一个基于 OpenSSL 库的同步方法,用于生成一对公钥和私钥。它可以创建多种加密算法的密钥对,包括 RSA、DSA 和 ECDSA 等。在使用该方法时,可以传入一个选项对象用于指定算法、密钥长度等参数。

语法
crypto.generateKeyPairSync(type[, options])

type:指定生成密钥对的算法类型。

options:一个可选的选项对象,包含以下参数:

  • modulusLength:仅适用于 RSA 类型,表示公钥的位数,默认为 2048。

  • publicKeyEncoding:指定公钥的编码方式,默认为 "spki"(SubjectPublicKeyInfo)。

  • privateKeyEncoding:指定私钥的编码方式,默认为 "pkcs8"(Private-Key Information Syntax Standard #8)。

示例

下面是一个使用 crypto.generateKeyPairSync() 方法生成 RSA 密钥对的示例:

const crypto = require('crypto');

const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
  modulusLength: 2048,
  publicKeyEncoding: {
    type: 'spki',
    format: 'pem'
  },
  privateKeyEncoding: {
    type: 'pkcs8',
    format: 'pem',
  }
});

console.log(publicKey);
console.log(privateKey);

输出结果:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArgOlKW6xxREJN5pbTrdY
...
svZi7jA90bvDn/gSL5pt9l5ChSPdt5iBnMJxaSlLCMw3qNOAmcS0Sfk=
-----END PUBLIC KEY-----
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQK4DpSpluscURCT
...
8WwZDvAGon/ERarthRIakg0NiWQyXnmvVyoN82gmNKLfFktOZQ==
-----END PRIVATE KEY-----

在上面的示例中,我们指定生成 RSA 密钥对,公钥和私钥均采用 PEM 编码方式,公钥的格式为 SubjectPublicKeyInfo,私钥的格式为 Private-Key Information Syntax Standard #8。

注意事项
  • crypto.generateKeyPairSync() 方法是一个同步方法,会阻塞进程,如果需要生成密钥对的时间较长,可能会对系统性能造成一定影响。

  • 生成密钥对时应该选择合适的密钥长度,通常情况下,RSA 密钥应该使用 2048 位或以上,ECDSA 密钥应该使用 256 位或以上。

  • 在公开场合下使用密钥对时应该注意保密性和完整性,避免私钥被泄漏或篡改。