0

JWK ⇄ PEM 密钥转换器

使用真正的 Web Crypto API 在 JWK 和 PEM 格式之间转换加密密钥,解码算法/曲线/大小,并计算 RFC 7638 JWK 指纹。

Buy Me a Coffee at ko-fi.com
处理中... 0%
解析密钥
转换格式
计算指纹
完成

结果

JSON Web 密钥 (JWK) 和 PEM 编码密钥在 JWT 库、TLS 工具和 OAuth/OIDC 配置中可互换显示,但手动在两者之间进行转换意味着对 DER 结构进行 Base64 解码或重新格式化 JSON — 很容易出现微妙的错误。该工具使用浏览器的真实 Web Crypto API 进行转换,而不是文本操作:使用 crypto.subtle.importKey('spki'|'pkcs8', ...) 导入粘贴的 PEM 块,并使用 exportKey('jwk', ...) 将其重新导出为 JWK;粘贴的 JWK 使用 importKey('jwk', ...) 导入并重新导出为 SPKI 或 PKCS8 DER,然后包装在正确的 PEM 标头中。由于浏览器本身会验证和解码密钥材料,因此格式错误的密钥或不匹配的算法选择会大声失败,而不是默默地产生垃圾。

支持的算法包括 RSA (RSASSA-PKCS1-v1_5)、P-256/P-384/P-521 曲线上的 EC,以及(浏览器实现它们的)Ed25519 和 X25519。 Web Crypto 中的浏览器对 Ed25519/X25519 的支持在各个引擎之间仍然不一致,因此该工具不是从用户代理字符串中猜测,而是对所选曲线运行实际的 crypto.subtle.generateKey() 探测,并清楚地告诉您此处是否不支持,而不是返回捏造的结果。

每次转换还会解码密钥的真实元数据:对于 RSA 密钥,直接来自 CryptoKey 对象的模数位长度和哈希算法;对于 EC 和 OKP 键,指定曲线;对于每个密钥,RFC 7638 JWK 指纹 — JWK 所需成员的 SHA-256 哈希值按严格的字典顺序序列化(RSA 为 e/kty/n,EC 为 crv/kty/x/y,OKP/Ed25519/X25519 为 crv/kty/x)。许多系统都使用此指纹作为键的“孩子”标识符,并且成员顺序错误会产生完全不同的散列,这正是手动实现容易出现的错误。

因为一切都通过您自己的浏览器选项卡中的 crypto.subtle 运行,所以私钥材料永远不会离开您的设备 - 转换过程中的任何时候都没有服务器,没有上传,也没有外部 API 调用。