error:040A1079:rsa routines:RSA_padding_check_PKCS1_OAEP_mgf



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

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

我的本地计算机:

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

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

我很困惑,因为我正在使用完全相同的键,完全相同的代码和完全相同的DB。在本地可以正常工作的东西在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")
);
});

我在检查其他问题的路上碰巧看到了这个问题。写这个意见只是为了帮助你的问题。

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

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

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

在Node.js文档的crypto部分之后,他们在导入时在代码的顶部声明了crypto变量。

const crypto = require('crypto');

希望这对你的问题有帮助。

相关内容

  • 没有找到相关文章

最新更新