使用crypto.subtle.digest(“ SHA-256”,缓冲区)散列大文件

时间:2018-10-10 10:21:59

标签: javascript hash cryptography digest

我已经开发了一个Web应用程序,用户可以在其中通过输入字段选择多个文件。然后,通过以下代码计算sha-256校验和。该代码(来自developer.mozilla.org)仅适用于小文件。我还必须更改什么才能处理大文件(例如1GB以上)?

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("");
}

0 个答案:

没有答案