Как хэшировать файл с sha256 в приложении Ionic 4 на основе Angular 7? - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь хэшировать файл размером более 1 ГБ с помощью SHA256 в приложении Ionic 4 на основе Angular 7. Я хочу использовать этот модуль NPM. Но нет документации. Как и куда импортировать этот модуль? или предложите лучшую альтернативу.

Я получаю следующую ошибку: введите описание изображения здесь

Я пробовал: импортировать * как файл sha256 из файла sha256;

Это файл index.js: в папке нет ни crypto, ни fs.

'use strict';

var crypto = require('crypto');
var fs = require('fs');

module.exports = function (filename, callback) {
  var sum = crypto.createHash('sha256');
  if (callback && typeof callback === 'function') {
    var fileStream = fs.createReadStream(filename);
    fileStream.on('error', function (err) {
      return callback(err, null)
    });
    fileStream.on('data', function (chunk) {
      try {
        sum.update(chunk)
      } catch (ex) {
        return callback(ex, null)
      }
    });
    fileStream.on('end', function () {
      return callback(null, sum.digest('hex'))
    })
  } else {
    sum.update(fs.readFileSync(filename));
    return sum.digest('hex')
  }
};

Ответы [ 4 ]

1 голос
/ 27 апреля 2019

Взгляните на Sodium (libsodium.js).

Sodium - это современная, простая в использовании программная библиотека для шифрования, дешифрования, подписей, хеширования паролей и многого другого.

Это портативный, кросс-компилируемый, устанавливаемый, пакетируемый форк NaCl, с совместимым API и расширенным API для еще большего повышения удобства использования.

Его цель - предоставить всеосновные операции, необходимые для создания высокоуровневых криптографических инструментов.

Sodium - это кроссплатформенность и кросс-языки.Он работает на различных компиляторах и операционных системах, включая Windows (с MinGW или Visual Studio, x86 и x86_64), iOS и Android.Версии Javascript и WebAssembly также доступны и полностью поддерживаются.Привязки для всех распространенных языков программирования доступны и хорошо поддерживаются.

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

Версия 1.0.17 была выпущена 7 января 2019 года.

Ссылка:

0 голосов
/ 05 мая 2019

Наконец я решил проблему. Спасибо всем за предложение мне решения. В моем решении я использую библиотеку 'crypto-js'. Я импортирую это как:

import * as crypto from 'crypto-js';

Затем читатель файла пользователя, чтобы прочитать файл, как показано ниже:

const reader = new FileReader();
    reader.onloadend = () => {
      const imgBlob = new Blob([reader.result], {
        type: filePath.type
      });
      var file_wordArr = crypto.lib.WordArray.create(imgBlob); //convert blob to WordArray
          var sha256_hash = crypto.SHA256(file_wordArr); //calculate SHA256 hash
          //alert("Calculated SHA1:" + sha256_hash.toString()); 
          console.log(sha256_hash.toString());
}
this.file.resolveLocalFilesystemUrl(filePath) //file path of android system
.then(entry => {
  (<FileEntry>entry).file(file => reader.readAsArrayBuffer(file))
})

Я получил то, что хотел с этим кодом.

0 голосов
/ 27 апреля 2019

Вам следует взглянуть на файл index.js пакета, который вы пытаетесь использовать.Похоже, вам не хватает некоторых пакетов (а именно crypto и fs, которые, как я полагаю, является файловой системой).Попробуйте установить их с помощью npm

0 голосов
/ 27 апреля 2019

Вы должны опубликовать код, который вы пробовали в любых вопросах, но на основе этого конкретного пакета вам, вероятно, просто нужно установить его и сделать что-то вроде:

import * as sha256File from 'sha256-file';

тогда использование простое в соответствии с документами:

const sum = sha256File('./path/to/a_file');
...