JWK

PEM 与 JWK 公钥转换器

在 PEM 与 JWK 间转换 RSA/EC SPKI 公钥,并计算 RFC 7638 指纹

安全与认证
🔒 100% 本地运行 — 你的数据不会离开当前页面
由 Evan 维护•最近更新:2026年9月30日
PEM / JWK PUBLIC KEY

仅处理 RSA/EC 公钥(SPKI PUBLIC KEY),拒绝私钥、证书和加密 PEM。

JWK

转换后的公钥会显示在这里。

工具说明

PEM 与 JWK 公钥转换器支持 RSA、P-256、P-384、P-521 EC 公钥,在单个 SubjectPublicKeyInfo PUBLIC KEY PEM Block 与公共 JWK 对象之间转换,输入上限 1 MB。JWK 整数和坐标字段必须使用规范且无填充的 Base64url;RSA n/e 使用最短正整数字节,EC 坐标保留固定宽度。两个方向均重新导出已导入的公钥,再计算 RFC 7638 SHA-256 Thumbprint。私有成员及 alg、use、key_ops、已有 kid 等策略元数据不会保留。生成的指纹只是 kid 候选,不证明信任、所有权、允许用途或证书链有效。不支持私钥、证书、PKCS#1 RSA PUBLIC KEY 或加密 PEM 容器。

场景配方

01

为 JWKS 准备验签公钥

目标:不接触对应私钥地转换已有 SPKI 公钥

  1. 粘贴 BEGIN PUBLIC KEY PEM 并转换为 JWK。
  2. 确认 kty、曲线或模数位数,并记录 RFC 7638 指纹。
  3. 核对消费方要求后,再添加策略相关的 alg、use 与 kid 元数据。

结果:得到仅含公共参数、可用于受控集成的 JWK 与确定性标识候选。

生产可用片段

用 Node.js 对照 SPKI 公共字段

javascript

const { createPublicKey } = require('node:crypto');
const { readFileSync } = require('node:fs');
console.log(createPublicKey(readFileSync('public.pem')).export({ format: 'jwk' }));
// 预期:kty 及 RSA n/e 或 EC crv/x/y 与转换器一致。
// 给 JWK 坐标或模数添加 '=' 后,本工具必须拒绝。

常见问题

支持哪种 PEM Block?

PEM 输入必须是未加密 SubjectPublicKeyInfo,也就是 BEGIN PUBLIC KEY。

可以转换私钥吗?

不可以,工具不需要也不输出私有参数;含私有成员的 JWK 只取其公共字段。

支持哪些 EC 曲线?

通过浏览器 WebCrypto 支持 P-256、P-384 和 P-521 公钥。

为什么拒绝 RSA PUBLIC KEY?

该标签包含 PKCS#1 而不是 SPKI,应先在可信密钥管理流程中转成标准 PUBLIC KEY。

生成的 kid 是什么?

它是 RFC 7638 SHA-256 JWK Thumbprint,是确定性候选值,不是服务器强制分配的标识。

密钥材料会上传吗?

不会,导入、导出、公共字段规范化与指纹计算都使用浏览器 WebCrypto 在本地完成。

为什么拒绝带填充或 RSA 前导零的字段?

RFC 7518 使用最短无符号字节表示 RSA 整数,RFC 7638 对其规范 JWK 表示计算哈希。拒绝非规范写法,可避免同一已导入公钥出现不同的所谓规范指纹。

alg、use、key_ops 或已有 kid 会保留吗?

不会。转换只输出公共密钥材料;策略元数据须按消费方要求核对后恢复。界面指纹是单独的确定性标识候选。

继续浏览