使用node-jose的ConcatKDF生成共享密钥提示EC公钥无效如何解决
问题原因
- 核心错误:
node-jose的密钥派生方法要求传入JWK类实例,你调用toJSON()将密钥序列化为了普通JS对象,无法通过算法的公钥有效性校验,直接触发了invalid EC public key报错。 - 次要笔误:代码中定义Alice私钥变量时拼写错误,将
alicePrivateKey写为alicPrivateKey,缺失字母e,后续也可能引发引用错误。
修复方案
直接使用密钥生成时返回的JWK实例参与派生即可,无需序列化处理,正确代码如下:
const jose = require('node-jose'); const index = require('node-jose/lib/algorithms/index'); const keystore = jose.JWK.createKeyStore(); const bobKey = await keystore.generate('EC', 'P-256'); const aliceKey = await keystore.generate('EC', 'P-256'); const props = { public: bobKey, length: 256 }; const result = await index.derive('ECDH-CONCAT', aliceKey, props);
如果你是从外部传入的序列化公钥JSON,需要先导入为JWK实例再使用:
// 假设bobPublicKeyJson是从其他端拿到的公钥序列化结果 const bobJWK = await keystore.add(bobPublicKeyJson); const props = { public: bobJWK, length: 256 };
内容的提问来源于stack exchange,提问作者Gleb
相关产品推荐
相关产品推荐

