#javascript #node.js #amazon-web-services #cryptojs
#javascript #node.js #amazon-веб-сервисы #криптоджейс
Вопрос:
Я использую пакет crypto для выполнения следующих действий :
- crypto.generateKeyPairSync() для генерации publicKey и PrivateKey
- Я создал ключи только один раз и сохранил их в файле .env
- crypto.publicEncrypt() для шифрования данных перед их сохранением в базе данных
- crypto.privateDecrypt() для расшифровки данных для рендеринга на HTML-странице (рендеринг данных на HTML-странице предназначен только для проверки правильности хранения данных, позже я буду использовать privateDecrypt при входе в систему, чтобы проверить, действителен ли pw).
На моем локальном компьютере:
- Я могу зашифровать данные и сохранить их в БД
- Расшифруйте данные и отобразите их в HTML
Однако, если я попытаюсь расшифровать данные в экземпляре AWS EC2, я получаю следующую ошибку: ошибка: 040A1079: процедуры rsa: 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")
);
});
Ответ №1:
(Я случайно увидел этот вопрос по пути, чтобы проверить другие вопросы. И написание этого мнения на всякий случай, если это может помочь вашей проблеме.)
Когда я увидел ваше сообщение об ошибке, я предположил, что с ним может быть проблема padding
.
Итак, я проверил ваш padding: crypto.constants.RSA_PKCS1_OAEP_PADDING
код и заметил, что crypto
переменная никогда не объявлялась при ее импорте, скорее вы объявляли только generateKeyPairSync
из crypto
подобного,
const { generateKeyPairSync } = require('crypto');
Следуя этой crypto
части Node.js док, они объявляют crypto
переменную в верхней части своего кода при импорте.
const crypto = require('crypto');
Надеюсь, это может помочь вашей проблеме.
Комментарии:
1. Код работает нормально локально, у меня просто возникла проблема, когда я пытаюсь запустить его с помощью экземпляра EC2 на AWS. Я привел только часть исходного кода, но спасибо, что упомянули об этом