Node.js 中的 crypto.generateKeyPair() 方法
crypto.generateKeyPair() 可用于生成指定类型的新非对称密钥对。支持生成密钥对的类型包括:RSA、DSA、EC、Ed25519、Ed448、X25519、X448 和 DH。当指定 publicKeyEncoding 或 privateKeyEncoding 时,该函数的行为就像在其结果上调用了 keyObject.export 一样,否则将返回 keyObject 的相应部分。
语法
crypto.generateKeyPair(type, options, callback)
参数
上述参数描述如下:
type – 用于保存需要生成密钥的字符串类型。支持的类型包括 - RSA、DSA、EC、Ed25519、Ed448、X25519、X448 和 DH。
options – 可以包含以下参数:
modulusLength – 用于保存 type(RSA、DSA)的密钥大小(以位为单位)。
publicExponent – 用于保存 RSA 算法的公钥指数值。
默认值为 – 0x10001
divisorLength – 用于保存 q 的大小(以位为单位)。
namedCurve – 用于保存要使用的曲线的名称。
prime – 用于保存 DH 等类型的素数参数。
PrimeLength – 用于保存素数长度(以位为单位)。
generator – 该参数保存自定义生成器值,默认值:2。
groupName – 这是 DH 算法的 Diffie-Hellman 组名称。
publicKeyEncoding – 用于保存公钥编码的字符串值。
privateKeyEncoding - 用于保存私钥编码的字符串值。
callback - 回调函数包含以下参数:
err – 用于保存错误类型。
publicKey – 用于保存公钥的值。
PrivateKey – 用于保存私钥的值。
示例
创建一个名为 generateKeyPair.js 的文件,并将下面的代码片段复制到其中。创建文件后,使用以下命令运行此代码,如以下示例所示:
node generateKeyPair.js
generateKeyPair.js
// Node.js program to demonstrate the flow of crypto.generateKeyPair() method // Importing generateKeyPair from crypto module const { generateKeyPair } = require('crypto'); // Calling generateKeyPair() method with the below parameters generateKeyPair('rsa', { modulusLength: 530, // options publicExponent: 0x10101, publicKeyEncoding: { type: 'pkcs1', format: 'der' }, privateKeyEncoding: { type: 'pkcs8', format: 'der', cipher: 'aes-192-cbc', passphrase: 'Welcome to TutorialsPoint!' } }, (err, publicKey, privateKey) => { // Callback function if(!err) { // This will print the asymmetric key pair console.log("Public Key is: ", publicKey); console.log(); console.log("Private Key is: ", privateKey); } else { // Prints error if any console.log("Errr is: ", err); } });
输出
C:\home
ode>> node generateKeyPair.js Public Key is: <Buffer 30 4a 02 43 03 43 66 5a e1 25 0d d8 c4 fe e3 a0 77 ea e4 e7 20 78 8c eb a7 a4 f6 85 f0 45 fc 7b 46 d7 3e 5e e3 8b a1 16 e5 59 e8 79 69 65 54 00 6c 89 ... > Private Key is: <Buffer 30 82 01 cd 30 57 06 09 2a 86 48 86 f7 0d 01 05 0d 30 4a 30 29 06 09 2a 86 48 86 f7 0d 01 05 0c 30 1c 04 08 1e a2 b4 ea ce 50 0e 80 02 02 08 00 30 0c ... >
示例
让我们再看一个例子。
// Node.js program to demonstrate the flow of crypto.generateKeyPair() method // Importing generateKeyPair from crypto module const { generateKeyPair } = require('crypto'); // Calling generateKeyPair() method with the below parameters generateKeyPair('ec', { namedCurve: 'secp256k1', // Options publicKeyEncoding: { type: 'spki', format: 'der' }, privateKeyEncoding: { type: 'pkcs8', format: 'der' } },(err, publicKey, privateKey) => { // Callback function if(!err) { // This will print the asymmetric key pair console.log("Public Key is: ", publicKey); console.log("Public Key in hex is: ", publicKey.toString('hex')); console.log(); console.log("Private Key is: ", privateKey); console.log("Private Key in hex is: ", privateKey.toString('hex')); }else{ // Prints error if any console.log("Errr is: ", err); } });
输出
C:\home
ode>> node generateKeyPair.js Public Key is: <Buffer 30 56 30 10 06 07 2a 86 48 ce 3d 02 01 06 05 2b 81 04 00 0a 03 42 00 04 d1 d0 0b 7e f7 e3 3e cf d8 08 2a 20 a8 5e 52 be ca 56 29 42 c3 6b 9f d3 15 7c ... > Public Key in hex is: 3056301006072a8648ce3d020106052b8104000a03420004d1d00b7ef7e33ecfd8082a20a85e52 beca562942c36b9fd3157cf98b03b41ecc4b4e13b4cd5cd35814383ee76afabaf794faf6f31bc8 c9f7007748f74767677c 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 05 01 a1 d5 80 f7 65 56 6f a3 3a 05 d3 6d ec 82 ad ... > Private Key in hex is: 308184020100301006072a8648ce3d020106052b8104000a046d306b02010104200501a1d580f7 65566fa33a05d36dec82ad590ff8697d182ddca6b881acfbadd1a14403420004d1d00b7ef7e33e cfd8082a20a85e52beca562942c36b9fd3157cf98b03b41ecc4b4e13b4cd5cd35814383ee76afa baf794faf6f31bc8c9f7007748f74767677c