【问题标题】:error:040A1079:rsa routines:RSA_padding_check_PKCS1_OAEP_mgf1:oaep decoding error On AWS错误:040A1079:rsa 例程:RSA_padding_check_PKCS1_OAEP_mgf1:AWS 上的 oaep 解码错误
【发布时间】:2021-02-26 12:56:57
【问题描述】:

我使用加密包执行以下操作:

  1. crypto.generateKeyPairSync() 生成 publicKey 和 privateKey
    • 我只创建了一次密钥,并将它们存储在 .env 文件中
  2. crypto.publicEncrypt() 在将数据存储到数据库之前对其进行加密
  3. crypto.privateDecrypt() 解密数据以在 HTML 页面上呈现 (在html页面渲染数据只是为了检查数据是否存储正确,稍后我会在登录时使用privateDecrypt来检查pw是否有效)。

在我的本地计算机上:

  1. 我能够加密数据并将其存储在数据库中
  2. 解密数据并在 HTML 上呈现

但是,如果我尝试解密 AWS EC2 实例上的数据,则会收到以下错误:error:040A1079:rsaroutines:RSA_padding_check_PKCS1_OAEP_mgf1:oaep 解码错误。

我很困惑,因为我使用的是完全相同的键、完全相同的代码和完全相同的数据库。在本地运行良好的方法在 AWS 上不起作用。这可能是什么问题?

const { generateKeyPairSync } = require('crypto');
const { publicKey, privateKey } = generateKeyPairSync('rsa', {
  modulusLength: 4096,
  publicKeyEncoding: {
    type: 'spki',
    format: 'pem'
  },
  privateKeyEncoding: {
    type: 'pkcs8',
    format: 'pem',
    cipher: 'aes-256-cbc',
    passphrase: 'top secret'
  }

const ENCRYPTED_pw = crypto.publicEncrypt(
                    {
                        key: PUBLIC_KEY,
                        padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
                        oaepHash: "sha256",
                    },
                    Buffer.from(body.pw)
                );
                //convert Array Buffer to String 
                let encryptedPW = ENCRYPTED_pw.toString("base64");
//INSERT data into DB HERE

//GET data from DB HERE

let decryptedPhoneNum = crypto.privateDecrypt(
                            {
                                key: PRIVATE_KEY,
                                padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
                                oaepHash: "sha256",
                            },
                            Buffer.from(result[i].pw, "base64")
                        );
});

【问题讨论】:

    标签: javascript node.js amazon-web-services cryptojs


    【解决方案1】:

    (我在检查其他问题的路上碰巧看到了这个问题。写下这个意见以防万一它可能对您的问题有所帮助。)

    当我看到您的错误消息时,我认为padding 可能有问题。

    所以我检查了您的padding: crypto.constants.RSA_PKCS1_OAEP_PADDING 代码,并注意到在您导入它时从未声明crypto 变量,而是像这样从crypto 声明了generateKeyPairSync

    const { generateKeyPairSync } = require('crypto');
    

    在此crypto part of Node.js doc 之后,他们在导入时在其代码顶部声明crypto 变量。

    const crypto = require('crypto');
    

    希望这对您的问题有所帮助。

    【讨论】:

    • 代码在本地运行良好,我只是在尝试使用 AWS 上的 EC2 实例运行它时遇到问题。我只带了一部分源代码,但谢谢提及
    猜你喜欢
    • 2020-11-19
    • 2018-10-12
    • 2018-09-15
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多