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

JWK EC公钥坐标编码机制及私钥重建P-521 JWK失败问题

问题:通过私钥重建P-521格式JWK失败

我尝试仅通过私钥重建P-521格式的JWK。根据JWK规范第4.2.1节:

“x成员包含椭圆曲线点的x坐标,采用坐标大端表示的base64url编码。”

我已按以下步骤操作:对私钥做base64url解码,将其与P-521基点进行标量乘法得到公钥点,再将x、y坐标转换为大端字节表示并重新编码为base64url格式,但结果与原JWK中的x、y字段不匹配。P-256曲线的尝试同样失败,相关代码如下:

const elliptic = require('elliptic');
const EC = elliptic.ec;
const {base16, base64url} = require('rfc4648');
const BN = require("bn.js");
const padBase16ToWholeOctets = s => s.length%2===0 ? s : '0'+s;
const bnToB64 = n => base64url.stringify(base16.parse(padBase16ToWholeOctets(n.toString(16))))

console.log('begin'); // forces console output to show from async IIFE

(async () => {
  let keyPair = await crypto.subtle.generateKey({ name: "ECDSA", namedCurve: "P-521" }, true, ['sign'])
  let jwk = await crypto.subtle.exportKey("jwk", keyPair.privateKey)
  console.log(jwk)

  const dHex = base16.stringify(base64url.parse(jwk.d, { loose: true }))

  const ec = new EC('p521')
  const [x,y] = ec.curve.g.mul(new BN(dHex, 16, 'be')).toJSON()

  console.log(`expected x: ` + jwk.x)
  console.log(`actual   x: ` + bnToB64(x))

  console.log(`expected y: ` + jwk.y)
  console.log(`actual   y: ` + bnToB64(y))

})();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 21:32:26