比较

算法 密钥类型 性能 安全性 管理复杂度 推荐场景
ES256 (ECC) 椭圆曲线(P‑256) 快(签名/验签都比 RSA 快)密钥短(32B 私钥) 高(椭圆曲线算法) 中等(要管理公/私钥对) 推荐:追求性能与安全兼顾,且习惯用现代加密。
RS256 (RSA) RSA(2048+ 位) 中(RSA 2048 签名相对慢) 较高(大密钥,公/私对) 兼容性最佳:已有大量库/平台默认支持 RSA。
HS256 (Shared Secret) 对称密钥(任意字节串) 最快 中(密钥泄露风险大) 最低(只管好一串密钥) 简单场景:完全信任后端,且不想折腾公/私钥对。

密钥 (ES256)

import { generateKeyPair, importJWK, exportJWK } from "jose";

// Generates an ES256 key pair and returns the private JWK as a JSON string.
export async function generateEs256KeyPair() {
  const { publicKey, privateKey } = await generateKeyPair("ES256", { extractable: true });

  const privateJwk = await exportJWK(privateKey);
  const publicJwk = await exportJWK(publicKey);

  console.log("Generated ES256 Public JWK:", publicJwk);
  console.log("Generated ES256 Private JWK:", privateJwk);

  return JSON.stringify(privateJwk);
}

// Derives the public JWK from a private JWK JSON string.
export async function derivePublicJwk(privateJwkString: string) {
  const privateJwk = JSON.parse(privateJwkString);
  const key = await importJWK(privateJwk, "ES256");

  const publicJwk = await exportJWK(key);
  console.log("Derived ES256 Public JWK:", publicJwk);

  return JSON.stringify(publicJwk);
}