SHA256使用Filereader问题以角度6散列大文件

问题描述 投票:2回答:1

我对SHA256哈希有问题。如果文件大小大于250 MB,将终止浏览器并崩溃。下面是哈希代码,请帮助我们。

let fileReader = new FileReader();
fileReader.readAsArrayBuffer(fileToSend);

  fileReader.onload = (e) => {
  const hash = CrypTo.SHA256(this.arrayBufferToWordArray(fileReader.result)).toString();
  this.hashCode=hash;
  this.fileHistory.MediaHash = hash;
  this.fileHistory.FileName = fileToSend.name;

  //Insert to file history
  this.fileHistoryService.postFiles(this.fileHistory).subscribe(
    data => {
      this.hashCode=data["MediaHash"];
      this.alertService.success('HASHFILE.FileUploadSuccessMessage', true);
      this.hideGenerateHashCodeButton = true;
    },
    error => {
       this.alertService.error('COMMONERRORMESSAGE.SomethingWentWrongErrorMessage');
  });

}

arrayBufferToWordArray(fileResult) {
    var i8a = new Uint8Array(fileResult);
    var byteArray = [];
    for (var i = 0; i < i8a.length; i += 4) {
      byteArray.push(i8a[i] << 24 | i8a[i + 1] << 16 | i8a[i + 2] << 8 | i8a[i + 3]);
    }
    return CrypTo.lib.WordArray.create(byteArray, i8a.length);
  }
javascript angular typescript sha256 cryptojs
1个回答
0
投票

您绝对应该使用流或类似的东西,以避免将所有文件加载到内存中。

特别是使用CryptoJS,我已经看到可以执行渐进式哈希。

var sha256 = CryptoJS.algo.SHA256.create();
sha256.update("Message Part 1");
sha256.update("Message Part 2");
sha256.update("Message Part 3");
​
var hash = sha256.finalize();

因此,请使用FileReader来读取文件的各个部分,然后每次读取部分时,都会更新sha256,直到没有更多要读取的内容为止。


请参阅:

filereader api on big files

© www.soinside.com 2019 - 2024. All rights reserved.