-1

我正在尝试在基于 Angular 7 的 Ionic 4 应用程序中使用 SHA256 对超过 1GB 的文件进行哈希处理。我想使用这个NPM 模块。但是没有文档。如何以及在何处导入此模块?或提出更好的选择。

我收到以下错误: 在此处输入图像描述

我试过: import * as sha256File from 'sha256-file';

这是 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

4 回答 4

1

看看(libsodium.js)。

Sodium 是一个现代的、易于使用的软件库,用于加密、解密、签名、密码哈希等。

它是 NaCl 的可移植、可交叉编译、可安装、可打包的分支,具有兼容的 API 和扩展 API,可进一步提高可用性。

它的目标是提供构建更高级别加密工具所需的所有核心操作。

Sodium 是跨平台和跨语言的。它可以在各种编译器和操作系统上运行,包括 Windows(使用 MinGW 或 Visual Studio、x86 和 x86_64)、iOS 和 Android。Javascript 和 WebAssembly 版本也可用并且完全受支持。所有常见编程语言的绑定都可用并且得到很好的支持。

设计选择强调安全性和易用性。但是,尽管强调高安全性,但原语总体上比大多数实现更快。

1.0.17 版本于 2019 年 1 月 7 日发布。

参考:

于 2019-04-27T20:56:36.993 回答
0

最后我解决了这个问题。谢谢大家给我建议的解决方案。在我的解决方案中,我使用了“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))
})

我用这段代码得到了我想要的。

于 2019-05-05T12:44:53.250 回答
0

您应该发布您在任何问题中尝试过的代码,但基于这个特定的包,您可能只需要安装它并执行以下操作:

import * as sha256File from 'sha256-file';

然后根据文档使用很简单:

const sum = sha256File('./path/to/a_file');
于 2019-04-27T15:18:39.587 回答
-1

您应该查看您尝试使用的包的 index.js 文件。似乎您缺少一些软件包(即加密和 fs,我假设它们是文件系统)。尝试使用 npm 安装它们

于 2019-04-27T15:38:10.740 回答