You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PuTTY生成的SSH-1 RSA密钥对转为Express后端JWT认证兼容格式

转换PuTTY SSH-1 RSA密钥为JWT兼容格式

嘿,我来帮你搞定PuTTY密钥转JWT可用格式的问题!你遇到的十进制公钥和PuTTY私钥格式,确实和JWT库(express-jwt、jsonwebtoken这些)要求的PEM/OpenSSH格式不兼容,咱们一步步来转换:

一、转换PuTTY SSH-1 RSA公钥到PEM格式(用于JWT验证)

你的公钥是十进制格式的SSH-1 RSA密钥,需要转成PEM格式(JWT库的标准输入格式),有两种方式:

方式1:用PuTTYgen图形界面(简单直观)

  1. 打开PuTTYgen工具,点击左上角「Load」按钮,选择你的PuTTY公钥文件(注意文件类型选「All Files」才能看到)
  2. 加载成功后,顶部菜单栏选择「Conversions」→「Export Public Key」
  3. 保存文件为public_key.pem,这个就是JWT验证能用的PEM格式公钥了

方式2:用命令行(适合批量/服务器环境)

如果你的环境有OpenSSH工具包,直接用ssh-keygen命令转换:

ssh-keygen -i -f your_putty_public_key_file > public_key.pem

解释:-i参数表示导入PuTTY格式的密钥,输出就是标准OpenSSH PEM格式。

二、转换PuTTY私钥到OpenSSH PEM格式(用于JWT签名)

你的私钥是PuTTY专属的「SSH PRIVATE KEY FILE FORMAT 1.1」二进制格式,得转成OpenSSH的PEM私钥才能给jsonwebtoken用来签名JWT:

方式1:PuTTYgen图形界面

  1. 打开PuTTYgen,点击「Load」加载你的PuTTY私钥文件
  2. 如果私钥有密码保护,输入密码解锁
  3. 菜单栏选择「Conversions」→「Export OpenSSH key」,保存为private_key.pem

方式2:命令行(PuTTYgen命令行版本)

如果安装了PuTTY工具包的命令行组件,用以下命令:

puttygen your_putty_private_key_file -O private-openssh -o private_key.pem

解释:-O private-openssh指定输出为OpenSSH私钥格式,-o指定输出文件。

三、在Express后端中使用转换后的密钥

转换完成后,就能直接和你的JWT库配合使用了:

1. 用私钥签名JWT(jsonwebtoken)

const jwt = require('jsonwebtoken');
const fs = require('fs');

// 读取PEM格式私钥
const privateKey = fs.readFileSync('./private_key.pem', 'utf8');

// 签名生成JWT
const token = jwt.sign(
  { userId: 'test-user', role: 'admin' }, // 自定义Payload
  privateKey,
  { algorithm: 'RS256', expiresIn: '1h' } // 用RS256算法,1小时过期
);
console.log('生成的JWT:', token);

2. 用公钥验证JWT(express-jwt)

const express = require('express');
const jwt = require('express-jwt');
const fs = require('fs');

const app = express();
const publicKey = fs.readFileSync('./public_key.pem', 'utf8');

// 全局JWT验证中间件
app.use(jwt({
  secret: publicKey,
  algorithms: ['RS256'] // 必须和签名时的算法一致
}));

// 受保护的路由
app.get('/api/protected', (req, res) => {
  res.send(`欢迎访问受保护路由,当前用户ID:${req.user.userId}`);
});

app.listen(3000, () => console.log('服务器启动在3000端口'));

3. (可选)转成JWKS格式配合jwks-rsa使用

如果你的架构需要用JWKS(JSON Web Key Set)来管理密钥,可以把PEM公钥转成JWKS:

const pemToJwk = require('pem-jwk');
const fs = require('fs');

const publicKeyPem = fs.readFileSync('./public_key.pem', 'utf8');
const jwk = pemToJwk(publicKeyPem);

// 生成JWKS格式
const jwks = { keys: [jwk] };
fs.writeFileSync('./jwks.json', JSON.stringify(jwks, null, 2));

之后就能用jwks-rsa库从这个JWKS文件加载密钥进行验证了。

注意事项

  • SSH-1 RSA用的是SHA1哈希算法,JWT推荐用RS256(SHA256withRSA),转换后的密钥完全支持这个算法,所以签名和验证时一定要指定algorithms: ['RS256']
  • 私钥一定要妥善保管,不要暴露给前端或不可信环境
  • 如果密钥有密码保护,签名时需要传入密码参数(比如jwt.sign(..., { passphrase: 'your-password' }))

内容的提问来源于stack exchange,提问作者Crowdpleasr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:21:52