Node.js crypto.generateKeyPair() 方法
crypto.generateKeyPair() 方法是加密模块的内置应用程序编程接口,用于生成指定类型的新非对称密钥对。例如,当前支持的密钥类型有RSA、DSA、EC、Ed25519、Ed448、X25519、X448 和 DH 。此外,如果此处说明了选项的publicKeyEncoding或privateKeyEncoding ,则此函数的作用就像在其输出上调用了keyObject.export() 。否则,键的特定部分将作为KeyObject返回。
但是,建议将公钥编码为“spki”,将私钥编码为“pkcs8”,并进行加密以进行长期存储。
句法:
crypto.generateKeyPair( type, options, callback )
参数:此方法接受三个参数,如上所述,如下所述:
- type:它包含一个字符串,并且必须包含以下一种或多种算法: 'rsa'、'dsa'、'ec'、'ed25519'、'ed448'、'x25519'、'x448'或'dh' .
- 选项:是对象类型。它可以保存以下参数:
- 模数长度:它包含一个数字。它是以比特为单位的密钥大小,仅适用于 RSA 和 DSA 算法。
- publicExponent:它包含一个数字。它是 RSA 算法的公共指数。默认值为 0x10001。
- divisorLength:它包含一个数字。它是 DSA 算法中q的大小。
- namedCurve:它包含一个字符串。它是 EC 算法中要使用的曲线的名称。
- prime:它拥有一个缓冲区。它是 DH 算法的主要参数。
- primeLength:它包含一个数字。它是 DH 算法的素数长度(以比特为单位)。
- 生成器:它包含一个数字。它是DH算法的自定义生成器。它的默认值为 2。
- groupName:它包含字符串。它是 DH 算法的 Diffie-Hellman 组名。
- publicKeyEncoding:它包含一个字符串。
- privateKeyEncoding:它持有一个对象。
- callback:它是一个函数,带有参数publicKey、privateKey 和 err 。
- err:保存错误。
- publicKey:它包含一个字符串、缓冲区或 KeyObject。
- privateKey:保存字符串、缓冲区或 KeyObject。
返回值:它返回给定类型的新非对称密钥对。
下面的例子说明了在 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 :
Private Key is:
示例 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