Electronjs и Nodejs (Crypto) crypto.scryptSync не является функцией - PullRequest
0 голосов
/ 18 февраля 2019

Привет Итак, у меня есть сервер, на котором работает Crypto, он работает отлично.Я использую Electronjs в качестве клиентской части, и предполагается, что crypto встроен в узел.когда я пытаюсь использовать модуль, он возвращает "crypto.scryptSync не является функцией"

У меня есть

 let crypto = require('crypto');

вверху страницы

я просто делаюпростой вызов как этот

Encrypt_AES

function Encrypt_AES(data, pubkey) {
 const algorithm = 'aes-192-cbc';
 const key = crypto.scryptSync(pubkey, 'salt', 24);
 const iv = Buffer.alloc(16, 0); // Initialization vector.
 const cipher = crypto.createCipheriv(algorithm, key, iv);
 let encrypted = cipher.update(JSON.stringify(data), 'utf8', 'hex');
 encrypted += cipher.final('hex');
 return encrypted;
}

Decrypt_AES

function Decrypt_AES(data, pubkey) {
 const algorithm = 'aes-192-cbc';
 const key = crypto.scryptSync(pubkey, 'salt', 24);
 const iv = Buffer.alloc(16, 0); // Initialization vector.
 const decipher = crypto.createDecipheriv(algorithm, key, iv);
 let decrypted = decipher.update(data, 'hex', 'utf8');
 decrypted += decipher.final('utf8');
 return JSON.parse(decrypted);
}

Я не понимаю, как он не может подобрать модуль в электронном режиме, с которым у меня никогда не было этой проблемылюбой другой модуль.

Я попробовал npm - я крипто

npm WARN deprecated crypto@1.0.1: This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in. npm notice created a lockfile as package-lock.json. You should commit this file. + crypto@1.0.1 added 1 package and audited 724 packages in 4.95s found 0 vulnerabilities

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Проблема

В том, что функция Node не определена при использовании Electron или не принимает определенный параметр, даже если она отлично работает с вашей локальной установкой Node, может произойти, когда версия узла, которую поддерживает Electron, старшечем ваша локальная установка Node.

Узнайте версию, которую вы используете

Хорошее первое начало - это посмотреть, когда рассматриваемая функция была добавлена ​​в Node.Вы можете сделать это, посмотрев документацию Node.js .Вы найдете таблицу истории прямо под именем функции в раскрывающемся блоке.

Node.js History Table

Здесь мы видим, что scryptSync был добавлен в Узел 10.5.0.

Если вы не знаете, какую версию Node поддерживает ваша установка Electron, вы можете запустить с Electron следующее:

console.log(process.versions)

Вы должны найтииспользованная версия Node в выводе.Например, для Electron 3.1.4 он должен выглядеть следующим образом:

{ http_parser: '2.8.0',
  node: '10.2.0',
  v8: '6.6.346.32',
  uv: '1.20.3',
  zlib: '1.2.11',
  ares: '1.14.0',
  modules: '64',
  nghttp2: '1.29.0',
  napi: '3',
  openssl: '1.1.0h',
  electron: '3.1.4',
  chrome: '66.0.3359.181' }

Для сравнения приведен вывод моей установки Electron 4.0.2:

{ http_parser: '2.8.0',
  node: '10.11.0',
  v8: '6.9.427.24-electron.0',
  uv: '1.23.0',
  zlib: '1.2.11',
  ares: '1.14.0',
  modules: '64',
  nghttp2: '1.33.0',
  napi: '3',
  openssl: '1.1.0',
  electron: '4.0.2',
  chrome: '69.0.3497.106',
  icu: '62.1',
  unicode: '11.0',
  cldr: '33.1',
  tz: '2018e' }

Как мы видим Electron 3использует Node 10.2.0.Таким образом, в узле, который Electron использует scryptSync, еще не реализовано, и поэтому undefined.

Как решить эту проблему

Вы можете решить эту проблему, если более новая версия Electron, поддерживающая версию NodeВы нуждаетесь, уже выпущено.

Вы можете посмотреть это в Электронных примечаниях к выпуску .До сих пор обновления версии Node были реализованы в основных версиях, так что рассмотрение следующей версии x.0.0 - хорошее начало.

В этом случае нам повезло: Electron 4 поддерживает Node 10.11.0, который реализует scryptSync.

Electron release notes for Electron 4.0.0

Таким образом, обновление до последней версии Electron должно решить эту проблему.

0 голосов
/ 18 февраля 2019

Я думаю, что для работы модулей nodejs в электронном режиме вам нужно настроить больше, чем просто необходимость, например, если вы использовали библиотеку в узле.

Эта ссылка, по-видимому, дает вам необходимую информациюиспользуйте модули NPM / nodejs в электронном виде:

Использование модулей нативного узла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...