📅  最后修改于: 2023-12-03 15:03:12.498000             🧑  作者: Mango
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 位或以上。
在公开场合下使用密钥对时应该注意保密性和完整性,避免私钥被泄漏或篡改。