Node.js crypto.publicEncrypt:'错误:错误:0906D06C:PEM例程:PEM_read_bio:无起始行'

时间:2018-07-15 00:16:01

标签: 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.publicEncrypt行引起以下错误: “错误:错误:0906D06C:PEM例程:PEM_read_bio:无起始行”

1 个答案:

答案 0 :(得分:0)

crypto.DiffieHellman.getPublicKey()返回的公钥值只是原始DH号,可以选择使用base64或hex进行编码。它不是(任何)PEM格式,甚至不是ASN.1 / DER格式(可以很容易地转换为PEM)。同样,crypto.ECDH.getPublicKey()仅是关键点(采用常规X9.62格式),而不是任何PEM或DER格式。

此外,DH和ECDH不是加密算法,它们是密钥协商(或秘密协商)算法,并且该操作分别由DiffieHellman.computeSecret()ECDH.computeSecret()执行。尽管没有明确记录,publicEncrypt实际上是调用OpenSSL的EVP_PKEY_encrypt{_init,},它不支持DH或ECDH,仅支持RSA(有几种填充选项),也可能不支持GOST包装(我不容易验证它可能与版本有关,因为几年前的1.1.0版上游OpenSSL放弃了GOST算法。

简而言之,你不能那样做。