Node.js:如何将 RSA 公钥转换为 OpenSSH 格式?

Posted

技术标签:

【中文标题】Node.js:如何将 RSA 公钥转换为 OpenSSH 格式?【英文标题】:Node.js: How to convert RSA public key to OpenSSH format? 【发布时间】:2019-05-22 16:02:24 【问题描述】:

我使用的是节点版本:v10.14.1,我使用以下代码生成密钥对:

generateKeyPair('rsa', 
    modulusLength: 4096,
    publicKeyEncoding: 
        type: 'pkcs1',
        format: 'pem'
    ,
    privateKeyEncoding: 
        type: 'pkcs8',
        format: 'pem',
        cipher: 'aes-256-cbc',
        passphrase: ''
    
, (err, publicKey, privateKey) => 
  // Do stuff
);

这将创建一个这种格式的公钥:

-----BEGIN RSA PUBLIC KEY-----
...
-----END RSA PUBLIC KEY-----

不幸的是,有时需要不同的格式。在我的情况下,将公钥上传到 AWS 需要 OpenSSH 格式,我认为是这样的:

ssh-rsa 
...

如何将 RSA 公钥格式转换为 OpenSSH 格式或直接使用 generateKeyPair() 生成?

【问题讨论】:

【参考方案1】:

node-sshpk 软件包可能会帮助您: https://github.com/joyent/node-sshpk

您可以使用pubKey.toBuffer(),或者更复杂一点的pubKey.toBuffer('ssh')。或者pubKey.toString('ssh'),如果你需要它作为一个字符串。

在您的示例中,代码应该是这样的:

const  generateKeyPair    = require('crypto');
const sshpk                 = require('sshpk');

generateKeyPair('rsa', 
    modulusLength: 4096,
    publicKeyEncoding: 
        type: 'pkcs1',
        format: 'pem'
    ,
    privateKeyEncoding: 
        type: 'pkcs8',
        format: 'pem',
    
, (err, publicKey, privateKey) => 
    if(err)
        // handle Error
    
    else
        const pemKey = sshpk.parseKey(publicKey, 'pem');
        const sshRsa = pemKey.toString('ssh');
        console.log(ssh_rsa_2);
    
);

【讨论】:

很抱歉,您的回答花了这么长时间才接受,尽管它帮助(并且仍然)解决了我的问题。

以上是关于Node.js:如何将 RSA 公钥转换为 OpenSSH 格式?的主要内容,如果未能解决你的问题,请参考以下文章

RSA Java 加密和 Node.js 解密不起作用

将 JSON 公钥/私钥对转换为 rsa.PrivateKey 和 rsa.PublicKey

如何将 JWK 中的公钥转换为 OpenSSL 的 PEM?

Node.js 和 webcrypto 之间的 RSA 加密

Nodejs 使用node-rsa 加密数据

Nodejs 使用node-rsa 加密数据