【问题标题】:[Nodejs - Crypto][JSencrypt] rsa routines:RSA_padding_check_PKCS1_OAEP_mgf1:oaep decoding error[Nodejs - Crypto][JSencrypt] rsa 例程:RSA_padding_check_PKCS1_OAEP_mgf1:oaep 解码错误
【发布时间】:2020-11-19 19:29:04
【问题描述】:

我使用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)

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

Error: error:04099079:rsa routines:RSA_padding_check_PKCS1_OAEP_mgf1:oaep decoding error

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

const privateKey = fs.readFileSync('RSA_private.key', { encoding: 'utf8' })

exports.RSAdecrypt = async (data) => {
    const buffer = Buffer.from(data, "base64")
    const decrypted = crypto.privateDecrypt(privateKey, buffer)
    return decrypted.toString('utf8')
}

【问题讨论】:

  • 尝试非对称加密?可能是 pkcs 填充问题。
  • @HarshManvar 如何设置自定义填充?请指导

标签: node.js encryption rsa node-crypto jsencrypt


【解决方案1】:

我找到了解决方案。我在this post 上看到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')
}

【讨论】:

  • 我在前端使用crypto-browserify 进行加密。当我在后端解密时,我得到error:0407109F:rsa routines:RSA_padding_check_PKCS1_type_2:pkcs decoding error 似乎pkcs1pkcs1_oaep 填充都不适用于crypto-browserify。您对下一步要尝试什么有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 2018-10-12
  • 2020-09-22
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多