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

如何基于secp256k1曲线从原始公私钥创建ECDH共享密钥?

Node.js crypto:从原始字节生成ECDH共享密钥

你提到的官方示例用的是生成或哈希派生的密钥,下面针对你的两个疑问给出直接解决方案:


1. 导入32字节私钥到ECDH对象

Node.js的ECDH.setPrivateKey()方法直接支持传入Buffer类型的32字节私钥(secp256k1曲线的私钥标准长度就是32字节),不需要额外转换。设置私钥后,ECDH对象会自动推导对应的公钥,无需调用generateKeys()。

示例代码片段:

const crypto = require('crypto');

// 假设这是你的32字节私钥Buffer
const myPrivateKeyBuffer = Buffer.from('你的32字节私钥十六进制字符串', 'hex');

// 创建ECDH实例
const ecdh = crypto.createECDH('secp256k1');
// 导入私钥
ecdh.setPrivateKey(myPrivateKeyBuffer);

// 此时可通过ecdh.getPublicKey()获取对应公钥(可选操作)

2. 33字节压缩公钥的有效性

33字节的Buffer是secp256k1曲线的压缩格式公钥,完全可以直接作为computeSecret()方法的otherPublicKey参数传入,Node.js的crypto模块会自动识别并处理压缩格式的公钥,不需要额外转换。


完整示例代码

结合你的需求,完整的共享密钥生成代码如下:

const crypto = require('crypto');

// 你的32字节私钥Buffer
const alicePrivateKey = Buffer.from('alice的32字节私钥十六进制', 'hex');
// 对方的33字节压缩公钥Buffer
const bobCompressedPubKey = Buffer.from('bob的33字节压缩公钥十六进制', 'hex');

// 创建ECDH实例并导入私钥
const aliceEcdh = crypto.createECDH('secp256k1');
aliceEcdh.setPrivateKey(alicePrivateKey);

// 计算共享密钥
const sharedSecret = aliceEcdh.computeSecret(bobCompressedPubKey, null, 'hex');
console.log('共享密钥:', sharedSecret);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 18:30:16