Nodejs crypto.publicEncrypt дает разные результаты на разных машинах - PullRequest
1 голос
/ 29 мая 2020

Мы пытаемся зашифровать и расшифровать, используя асимметричный c ключ в AWS KMS. Конфигурация ключа следующая:

AWS asymmetric key configuration

В NodeJS мы используем ключ publi c для шифрования через crypto.publicEncrypt :

const encryptRSAPayload = (buffer, publicKey) => {
  const encryptedBuffer = crypto.publicEncrypt(
    {
      key: publicKey,
      oaepHash: 'sha256',
      padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
    },
    buffer
  );

  return encryptedBuffer;
};

И мы используем такую ​​функцию (ключ publi c читается из локального файла во время минимального воспроизведения):

  const plainText = '12345678910';
  const encrypted = await encryptRSAPayload(Buffer.from(plainText), publicKey);

Теперь у четырех разработчиков есть запустил тот же самый код (заархивированный, с publi c key et c), это происходит:

ПРИМЕЧАНИЕ. Все разработчики используют новейшую систему OSX.

  1. Двое из нас могут использовать AWS для дешифрования всего, что мы производим с помощью функции шифрования, а двое других не могут (из-за ошибки IvalidCiphertext: null) из AWS.

  2. Зашифрованная строка base64 с одной из машин, которая не может зашифровать -> расшифровать, не может быть расшифрована на любой другой машине.

  3. Зашифрованная строка base64 с одного из машины, которые могут зашифровать -> дешифровать, могут быть расшифрованы в aws с любой машины.

К настоящему времени ive потратила на это два дня и немного не знала, что делать. Есть идеи?

1 Ответ

0 голосов
/ 06 июня 2020

Проблема решена еще через несколько дней отладки. Проблема возникла из-за поставляемой версии OpenSSL, поставляемой с OSX. Для меня это был LibreSSL 2.8, который не включает некоторые флаги заполнения, используемые в OAEP, и не меняет ha sh на sha256 (вместо sha1).

Решение было:

  1. Установите OpenSSL через Homebrew и установите PATH env для использования этой версии вместо поставляемой версии.
  2. Переустановите любую установленную версию узла, чтобы повторно установить ссылку на правильную версию OpenSSL.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...