Node.js crypto.publicEncrypt:';错误:错误:0906D06C:PEM例程:PEM_read_bio:no start line';

Node.js crypto.publicEncrypt:';错误:错误:0906D06C:PEM例程:PEM_read_bio:no start line';,node.js,encryption,public-key-encryption,diffie-hellman,Node.js,Encryption,Public Key Encryption,Diffie Hellman,我正在尝试使用crypto.js中的公钥加密,我想使用publicEncrypt对一些消息进行加密,然后使用privateDecrypt对其进行解密 const crypto=require('crypto'); let alice=crypto.getDiffieHellman('modp14'); alice.generateKeys(); let enc=crypto.publicEncrypt(alice.getPublicKey(),Buffer.from('hello')); 但是

我正在尝试使用crypto.js中的公钥加密,我想使用
publicEncrypt
对一些消息进行加密,然后使用
privateDecrypt
对其进行解密

const crypto=require('crypto');
let alice=crypto.getDiffieHellman('modp14');
alice.generateKeys();
let enc=crypto.publicEncrypt(alice.getPublicKey(),Buffer.from('hello'));
但是,
crypto.publicEncrypt
行导致以下错误:
“错误:错误:0906D06C:PEM例程:PEM_read_bio:no start line”

crypto.DiffieHellman.getPublicKey()返回的公钥值只是原始DH编号,可以选择以base64或十六进制编码。它不是(任何)PEM格式,甚至不是ASN.1/DER格式(很容易转换成PEM)。类似地,
crypto.ECDH.getPublicKey()
只是点(在传统的X9.62格式中),而不是任何PEM或DER格式

此外,DH和ECDH不是加密算法,它们是密钥协商(或秘密协商)算法,该操作分别由
DiffieHellman.computeSecret()
ECDH.computeSecret()
执行。虽然没有明确的文档记录,
publicEncrypt
实际上调用OpenSSL的
EVP_PKEY_encrypt{u init,}
,它不支持DH或ECDH,只支持RSA(有几个填充选项)和可能的GOST wrap(我无法轻松验证这一点,它很可能与版本有关,因为几年前1.1.0版本的上游OpenSSL放弃了GOST算法)

简而言之,你不能那样做