如何使用Node.js生成ECDSA密钥对?是否有原生实现替代sshpk?
Node.js 自 v10.12.0 版本起,内置的 crypto 模块已原生支持生成 ECDSA 密钥对,无需依赖第三方未维护的 sshpk 包。
你可以用下面的代码直接替换原有逻辑:
import { generateKeyPairSync } from 'node:crypto'; // 生成ECDSA密钥对,可按需替换namedCurve参数为你需要的曲线 const { publicKey, privateKey } = generateKeyPairSync('ec', { // 常用可选曲线:prime256v1(对应NIST P-256)、secp384r1(P-384)、secp521r1(P-521) namedCurve: 'prime256v1', // 公钥输出配置,此处输出PEM格式的SPKI标准公钥 publicKeyEncoding: { type: 'spki', format: 'pem' }, // 私钥输出配置,此处输出PEM格式的PKCS8标准私钥 privateKeyEncoding: { type: 'pkcs8', format: 'pem' } });
如果需要生成和原有 sshpk 输出格式完全一致的密钥,仅需调整对应编码参数即可:比如要输出OpenSSH格式的公钥,可将publicKeyEncoding.type设置为ssh,即可直接得到ecdsa-sha2-nistp256开头的标准SSH公钥字符串。
高并发场景推荐使用异步的generateKeyPair方法,避免阻塞Node.js事件循环:
import { generateKeyPair } from 'node:crypto'; generateKeyPair('ec', { namedCurve: 'prime256v1', publicKeyEncoding: { type: 'spki', format: 'pem' }, privateKeyEncoding: { type: 'pkcs8', format: 'pem' } }, (err, publicKey, privateKey) => { if (err) throw err; // 业务逻辑处理生成的密钥对 });
内容的提问来源于stack exchange,提问作者Gajus
相关产品推荐
相关产品推荐

