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

如何用Node.js内置crypto模块从n、e生成PKCS8-PUBLIC-PEM格式RSA公钥

用Node.js原生crypto模块替代node-rsa生成RSA公钥并加密

你可以直接通过crypto.createPublicKey()传入n和e组件构造公钥,无需依赖第三方库。以下是替换后的实现代码:

const crypto = require('crypto');

// 第三方API返回的RSA公钥组件
const n = Buffer.from('0086fa9ba066685845fc03833a9699c8baefb53cfbf19052a7f10f1eaa30488cec1ceb752bdff2df9fad6c64b3498956e7dbab4035b4823c99a44cc57088a23783', 'hex');
const e = 0x10001; // 常见的RSA公钥指数

// 构造RSA公钥对象
const publicKey = crypto.createPublicKey({
  key: { n, e },
  type: 'public',
  format: 'object'
});

// (可选)导出PKCS8-PUBLIC-PEM格式的公钥字符串
const publicKeyPem = publicKey.export({
  type: 'spki',
  format: 'pem'
});

// 加密数据(注意填充方式需与第三方要求一致)
const data = '123';
const encryptedText = crypto.publicEncrypt(
  {
    key: publicKey,
    padding: crypto.constants.RSA_PKCS1_PADDING // 匹配node-rsa默认填充,若第三方要求OAEP则换为RSA_PKCS1_OAEP_PADDING
  },
  Buffer.from(data)
);

console.info(`Encrypted text: ${encryptedText.toString('base64')}`);

关键说明:

  • 公钥构造:crypto.createPublicKey()支持直接接收包含n(Buffer类型模值)和e(指数,可传数字或Buffer)的对象,指定format: 'object'即可识别为RSA组件格式。
  • PKCS8格式导出:通过公钥对象的export()方法,指定type: 'spki'即可生成标准的PKCS8公钥PEM(开头为-----BEGIN PUBLIC KEY-----)。
  • 填充一致性:node-rsa默认使用RSA_PKCS1_PADDING,而crypto.publicEncrypt默认是RSA_PKCS1_OAEP_PADDING,必须根据第三方API的加密要求调整填充方式,否则加密结果会不兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:48:30