Node.js 使用公钥加密的节点加密而不是JSEncrypt

Node.js 使用公钥加密的节点加密而不是JSEncrypt,node.js,encryption,node-crypto,jsencrypt,Node.js,Encryption,Node Crypto,Jsencrypt,我有一些公钥,看起来像miibijanbgkqhkig9w0baqefao…(392个字符)。 它在浏览器中用于使用JSEncrypt加密某些字符串 如何使用NodeJS加密模块使用该公钥加密字符串 我试过这个: const crypto = require('crypto') const encrypted = crypto.publicEncrypt('MIIBIjA....', '111111') console.log(encrypted.toString('base64')) 但是g

我有一些公钥,看起来像
miibijanbgkqhkig9w0baqefao…
(392个字符)。 它在浏览器中用于使用JSEncrypt加密某些字符串

如何使用NodeJS加密模块使用该公钥加密字符串

我试过这个:

const crypto = require('crypto')
const encrypted = crypto.publicEncrypt('MIIBIjA....', '111111')
console.log(encrypted.toString('base64'))
但是get
错误:0909006C:PEM例程:get\u name:无起始行

我还尝试将公钥和字符串转换为缓冲区,但出现了相同的错误。

如果传入的密钥是字符串,则默认情况下会将其解释为PEM编码的密钥。
PEM编码密钥由一行页眉、一行Base64编码的正文(即DER编码密钥的Base64编码数据)和一行页脚组成。
在发布的代码段中,缺少页眉行(可能还有页脚行),这会导致错误

crypto.publicEncrypt(密钥、缓冲区)
默认使用OAEP作为填充。另一方面,仅支持PKCS#1 v1.5填充。因此,如果实现应该与JSEncrypt兼容,即如果密文应该可以用JSEncrypt解密,那么必须明确指定PKCS#1 v1.5填充

以下NodeJS代码使用加密模块对消息进行加密,并使用JSEncrypt对密文进行解密:

const crypto = require('crypto')
const { JSEncrypt } = require('js-encrypt')

const publicKey = `-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNvs/qUMjkfq2E9o0qn03+KJE7
ASczEbn6q+kkthNBdmTsskikWsykpDPnLWhAVkmjz4alQyqw+mHYP9xhx8qUC4A3
tXY0ObxANUUKhUvR7zNj4vk4t8F2nP3erWvaG8J+sN3Ubr40ZYIYLS6UHYRFrqRD
CDhUtyjwERlz8KhLyQIDAQAB
-----END PUBLIC KEY-----`

const privateKey = `-----BEGIN PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAM2+z+pQyOR+rYT2
jSqfTf4okTsBJzMRufqr6SS2E0F2ZOyySKRazKSkM+ctaEBWSaPPhqVDKrD6Ydg/
3GHHypQLgDe1djQ5vEA1RQqFS9HvM2Pi+Ti3wXac/d6ta9obwn6w3dRuvjRlghgt
LpQdhEWupEMIOFS3KPARGXPwqEvJAgMBAAECgYADxGqqL7B9/pPOy3TqQuB6tuNx
4SOGm9x76onqUisoF7LhYqJR4Be/LAKHSR2PkATpKvOcMw6lDvCbtQ+j+rSK2PkN
4iDi1RYqbLUbZBS8vhrgU0CPlmgSSp1NBsqMK9265CaJox3frxmBK1yuf22RboIK
pqOzcluuA4aqLegmwQJBAP0+gM/tePzx+53DrxpYQvlfi9UJo7KeqIFL8TjMziKt
EaRGeOZ6UX/r6CQHojYKnNti7pjAwonsdwCTcv1yy7sCQQDP+/ww49VFHErON/MO
w5iYCsrM5Lx+Yc2JAjetCDpkMrRT92cgQ0nxR5+jNeh+gE2AmB9iKlNxsHJoRaPQ
lBRLAkEAl9hiZEp/wStXM8GhvKovfldMAPFGtlNrthtTCDvFXgVoDpgy5f9x3sIU
74WkPcMfSmyHpA/wlcKzmCTRTicHAQJBALUjq7MQ2tAEIgqUo/W52I6i55mnpZsU
pyOqcL8cqW5W0sNGd+SbdizTym8lJkX2jIlw8/RVFLOxjxLNhCzGqx0CQQDeUMnw
7KGP3F7BnbsXCp64YDdihzSO5X/Mfwxw6+S/pyKZ0/X4uwt24kZuoDnFzGWJYlea
sDQC6enIru+ne5es
-----END PRIVATE KEY-----`

// Encrypt with crypto module (RSA - PKCS#1 v1.5 Padding)
var ciphertext = crypto.publicEncrypt(
    {
        key: publicKey,
        padding: crypto.constants.RSA_PKCS1_PADDING
    }, 
    Buffer.from('The quick brown fox jumps over the lazy dog','utf8')
)
console.log(ciphertext.toString('base64'))

// Decrypt with JSEncrypt
var decrypt = new JSEncrypt()
decrypt.setPrivateKey(privateKey)
var decrypted = decrypt.decrypt(ciphertext.toString('base64'))
console.log(decrypted) // The quick brown fox jumps over the lazy dog

有帮助吗?@RahulSingh,那么我应该只添加
----开始公钥------
第一行和
----结束公钥------
最后一行并将字符串拆分为64个字符的行吗?非常感谢!