比较
算法 |
密钥类型 |
性能 |
安全性 |
管理复杂度 |
推荐场景 |
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);
}