Node.js 中的 crypto.generateKeyPair() 方法
所述可用于产生新的非对称密钥对指定类型的。支持生成密钥对的类型有:RSA、DSA、EC、Ed25519、Ed448、X25519、X448和DH。当指定了publicKeyEncoding或privateKeyEncoding时,该函数的行为就像在其结果上被调用一样,否则返回keyObject的相应部分。crypto.generateKeyPair()keyObject.export
语法
crypto.generateKeyPair(type, options, callback)
参数
上述参数描述如下-
type -它保存需要为其生成密钥的字符串类型。支持的类型有-RSA、DSA、EC、Ed25519、Ed448、X25519、X448和DH。
选项 -它可以保存以下参数-
modulusLength-这保存了类型(RSA、DSA)的密钥大小(以位为单位)。
publicExponent –保存RSA算法的公共指数值。
默认值为–0x10001
divisorLength –这以位为单位保存q的大小。
namedCurve–这将保存要使用的曲线的名称。
prime–这将保存DH等类型的素数参数。
PrimeLength –这将保存以位为单位的素数长度。
generator–此参数保存自定义生成器值,默认值:2。
groupName –这是DH算法的差异赫尔曼组名称。
publicKeyEncoding –这将保存公钥编码的字符串值。
privateKeyEncoding -这将保存私钥编码的字符串值。
回调 -回调具有以下参数-
err –这将保存错误的类型。
publicKey –这将保存公钥的值。
PrivateKey–这将保存私钥的值。
示例
创建一个具有名称的文件-generateKeyPair.js并复制以下代码片段。创建文件后,使用以下命令运行此代码,如下例所示-
node generateKeyPair.js
生成密钥对.js
//Node.jsprogram 演示了 crypto.generateKeyPair() 方法的流程 // 从加密模块导入 generateKeyPair const { generateKeyPair } = require('crypto'); // 使用以下参数调用 generateKeyPair() 方法 generateKeyPair('rsa', { modulusLength: 530, // 选项 publicExponent: 0x10101, publicKeyEncoding: { type: 'pkcs1', format: 'der' }, privateKeyEncoding: { type: 'pkcs8', format: 'der', cipher: 'aes-192-cbc', passphrase: 'Welcome to nhooo!' } }, (err, publicKey, privateKey) => { // 回调函数 if(!err) { // 这将打印非对称密钥对 console.log("公钥是: ", publicKey); console.log(); console.log("私钥是: ", privateKey); } else { // 打印错误(如果有) console.log("错误是: ", err); } });
输出结果
C:\home\node>> node generateKeyPair.js 公钥是:私钥是:
示例
让我们再看一个例子。
//Node.jsprogram 演示了 crypto.generateKeyPair() 方法的流程 // 从加密模块导入 generateKeyPair const { generateKeyPair } = require('crypto'); // 使用以下参数调用 generateKeyPair() 方法 generateKeyPair('ec', { namedCurve: 'secp256k1', // 选项 publicKeyEncoding: { type: 'spki', format: 'der' }, privateKeyEncoding: { type: 'pkcs8', format: 'der' } },(err, publicKey, privateKey) => { // 回调函数 if(!err) { // 这将打印非对称密钥对 console.log("公钥是: ", publicKey); console.log("十六进制公钥是: ", publicKey.toString('hex')); console.log(); console.log("私钥是: ", privateKey); console.log("十六进制的私钥是: ", privateKey.toString('hex')); }else{ // 打印错误(如果有) console.log("错误是: ", err); } });
输出结果
C:\home\node>> node generateKeyPair.js 公钥是:十六进制公钥是: 3056301006072a8648ce3d020106052b8104000a03420004d1d00b7ef7e33ecfd8082a20a85e52 beca562942c36b9fd3157cf98b03b41ecc4b4e13b4cd5cd35814383ee76afabaf794faf6f31bc8 c9f7007748f74767677c 私钥是: 十六进制的私钥是: 308184020100301006072a8648ce3d020106052b8104000a046d306b02010104200501a1d580f7 65566fa33a05d36dec82ad590ff8697d182ddca6b881acfbadd1a14403420004d1d00b7ef7e33e cfd8082a20a85e52beca562942c36b9fd3157cf98b03b41ecc4b4e13b4cd5cd35814383ee76afa baf794faf6f31bc8c9f7007748f74767677c