crypto.generateKeyPair(type, options, callback)
type<string> 必须是'rsa'、'rsa-pss'、'dsa'、'ec'、'ed25519'、'ed448'、'x25519'、'x448'或'dh'。options<Object>- 'modulusLength' <number> 密钥大小(以位为单位)(RSA, DSA)。
publicExponent<number> 公共指数 (RSA)。默认值:0x10001。hashAlgorithm<string> 消息摘要的名称 (RSA-PSS)。mgf1HashAlgorithm<string> MGF1(RSA-PSS)使用的消息摘要算法名称。saltLength<number> 最小盐长度(字节)(RSA-PSS)。divisorLength<number>q的位数(DSA)。namedCurve<string> 使用的曲线名称(EC)。prime<Buffer> 质数参数(DH)。primeLength<number> 以比特为单位的素数长度(DH)。- 'generator' <number> 定制生成器(DH)。默认: '2'。
groupName<string> Diffie-Hellman 组名称 (DH)。参见crypto.getDiffieHellman()。paramEncoding<string> 必须是'named'或'explicit'(EC)。 默认值:'named'。publicKeyEncoding<Object> 参见keyObject.export()。privateKeyEncoding<Object> 参见keyObject.export()。
回调<Function>错误<Error>publicKey<string> | <Buffer> | <KeyObject>privateKey<string> | <Buffer> | <KeyObject>
生成给定 type 的新非对称密钥对。目前支持 RSA、RSA-PSS、DSA、EC、Ed25519、Ed448、X25519、X448 和 DH。
【Generates a new asymmetric key pair of the given type. RSA, RSA-PSS, DSA, EC,
Ed25519, Ed448, X25519, X448, and DH are currently supported.】
如果指定了 publicKeyEncoding 或 privateKeyEncoding,此函数的行为就好像在其结果上调用了 keyObject.export()。否则,密钥的相应部分将作为 KeyObject 返回。
【If a publicKeyEncoding or privateKeyEncoding was specified, this function
behaves as if keyObject.export() had been called on its result. Otherwise,
the respective part of the key is returned as a KeyObject.】
建议将公钥编码为 'spki',私钥编码为 'pkcs8' 并加密以便长期存储:
【It is recommended to encode public keys as 'spki' and private keys as
'pkcs8' with encryption for long-term storage:】
const {
generateKeyPair,
} = await import('node:crypto');
generateKeyPair('rsa', {
modulusLength: 4096,
publicKeyEncoding: {
type: 'spki',
format: 'pem',
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem',
cipher: 'aes-256-cbc',
passphrase: 'top secret',
},
}, (err, publicKey, privateKey) => {
// Handle errors and use the generated key pair.
});const {
generateKeyPair,
} = require('node:crypto');
generateKeyPair('rsa', {
modulusLength: 4096,
publicKeyEncoding: {
type: 'spki',
format: 'pem',
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem',
cipher: 'aes-256-cbc',
passphrase: 'top secret',
},
}, (err, publicKey, privateKey) => {
// Handle errors and use the generated key pair.
});完成后,callback 将被调用,err 的值为 undefined,publicKey / privateKey 表示生成的密钥对。
【On completion, callback will be called with err set to undefined and
publicKey / privateKey representing the generated key pair.】
如果以其 util.promisify()ed 版本调用此方法,它将返回一个包含 publicKey 和 privateKey 属性的 Object 的 Promise。
【If this method is invoked as its util.promisify()ed version, it returns
a Promise for an Object with publicKey and privateKey properties.】