仅使用 nodejs/javascript 从私钥 pem 中提取 public 密钥

Extract public key from private key pem using only nodejs/javascript

仅使用 nodejs javascript,如何从私钥 pem 中提取 public 密钥?

我手上的私钥是PEM格式的私钥;我想提取 public 密钥,以便将其分发给协作者。

我经常使用纯 javascript node-forge 模块,但还没有发现如何从私钥中提取 public 密钥。

我也知道,目前正在使用 ursa 模块来完成这个;但我想要 pure javascriptpure nodejs 解决方案(如果可用)。

来自 node-forge documentation

pem = '-----PRIVATE KEY ----- [...]'
pki = require('node-forge').pki
privateKey = pki.privateKeyFromPem(pem)
publicKey  = pki.setRsaPublicKey(privateKey.n, privateKey.e)
console.log(pki.publicKeyToPem(publicKey))

现代答案 NodeJS v11.6.0(2018 年 12 月发布)

您不需要任何外部包

https://nodejs.org/api/crypto.html

const crypto = require('crypto')
const fs = require('fs')

// assuming you have a private.key file that begins with '-----BEGIN RSA PRIVATE KEY-----...'
const privateKey = fs.readFileSync('./private.key')

const pubKeyObject = crypto.createPublicKey({
    key: privateKey,
    format: 'pem'
})

const publicKey = pubKeyObject.export({
    format: 'pem',
    type: 'spki'
})

// -----BEGIN PUBLIC KEY-----... 
console.log(publicKey)