Хэшируйте большие файлы с помощью crypto.subtle.digest («SHA-256», буфер) - PullRequest
0 голосов
/ 10 октября 2018

Я разработал веб-приложение, в котором пользователь может выбрать несколько файлов через поле ввода.Затем контрольные суммы sha-256 рассчитываются по следующему коду.Код (взятый из developer.mozilla.org) работает только для небольших файлов.Что я должен изменить для обработки больших файлов (например, 1 ГБ +)?

function sha256(buffer){
  return crypto.subtle.digest("SHA-256", buffer).then(function (hash) {
    return hex(hash);
  });
}

function hex(buffer) {
  var hexCodes = [];
  var view = new DataView(buffer);
  for (var i = 0; i < view.byteLength; i += 4) {
    // Using getUint32 reduces the number of iterations needed (we process 4 bytes each time)
    var value = view.getUint32(i)
    // toString(16) will give the hex representation of the number without padding
    var stringValue = value.toString(16)
    // We use concatenation and slice for padding
    var padding = '00000000'
    var paddedValue = (padding + stringValue).slice(-padding.length)
    hexCodes.push(paddedValue);
  }

  // Join all the hex strings into one
  return hexCodes.join("");
}
...