[Nodejs - Crypto][JSencrypt] rsa 例程:RSA_padding_check_PKCS1_OAEP_mgf1:oaep 解码错误

Swa*_*oni 5 encryption rsa node.js jsencrypt node-crypto

我使用NodeJS Crypto模块在后端使用 RSA 进行加密和解密,并在前端使用JSencrypt进行前端 RSA 加密和解密

但问题是,每当我使用公钥在前端加密时,我的后端都会抛出此错误(PS:我在 NuxtJS 中使用它,因此使用导入函数。)

const { JSEncrypt } = await import('jsencrypt')
const rsa = new JSEncrypt({ default_key_size: 1024 })
rsa.setPublicKey(store.state.publicKey)
const xKey = rsa.encrypt(store.state.ticket)
Run Code Online (Sandbox Code Playgroud)

然后每当我尝试在后端使用这段代码进行解码时,它就会抛出这个

Error: error:04099079:rsa routines:RSA_padding_check_PKCS1_OAEP_mgf1:oaep decoding error
Run Code Online (Sandbox Code Playgroud)

这是我使用 privateKey 进行 RSA 解码的后端代码

Error: error:04099079:rsa routines:RSA_padding_check_PKCS1_OAEP_mgf1:oaep decoding error
Run Code Online (Sandbox Code Playgroud)

Swa*_*oni 3

我找到了解决方案。我在这篇文章JSencrypt中看到pkcs1默认使用填充。所以我已经将我的解密器更改为pkcs1默认节点加密使用pkcs1_oaep的默认值。

这是解密器的代码。

exports.RSAdecrypt = async (data) => {
    const buffer = Buffer.from(data, "base64")
    const decrypted = crypto.privateDecrypt({ key: privateKey, padding: crypto.constants.RSA_PKCS1_PADDING }, buffer)
    return decrypted.toString('utf8')
}
Run Code Online (Sandbox Code Playgroud)