Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么JS中blob的散列与终端中使用sha256sum时获得的散列不同?_Javascript - Fatal编程技术网

Javascript 为什么JS中blob的散列与终端中使用sha256sum时获得的散列不同?

Javascript 为什么JS中blob的散列与终端中使用sha256sum时获得的散列不同?,javascript,Javascript,我首先使用Javascript中的FileReaderAPI读取一个blob,以此对其进行哈希处理。我正在使用的图书馆是 但是,当我在终端中执行“sha256sum zipfile.zip”时,得到的哈希值与记录的哈希值不匹配。我还尝试了FileReaderAPI的所有其他读取方法。我应该怎么做呢?我知道这个“答案”并没有给出解决方案,但它解释了为什么这不起作用 当前版本的JSHashes库(1.0.7)需要一个字符串作为输入,但您提供了一个ArrayBuffer 内部调用hex时,将执行此代码

我首先使用Javascript中的FileReaderAPI读取一个blob,以此对其进行哈希处理。我正在使用的图书馆是

但是,当我在终端中执行“sha256sum zipfile.zip”时,得到的哈希值与记录的哈希值不匹配。我还尝试了FileReaderAPI的所有其他读取方法。我应该怎么做呢?

我知道这个“答案”并没有给出解决方案,但它解释了为什么这不起作用

当前版本的JSHashes库(1.0.7)需要一个字符串作为输入,但您提供了一个
ArrayBuffer

内部调用
hex
时,将执行此代码,其中
s
是您的数组缓冲区,
utf8
默认为
true

function rstr(s, utf8) {
  s = (utf8) ? utf8Encode(s) : s;
  return binb2rstr(binb(rstr2binb(s), s.length * 8));
}

function utf8Encode(str) {
  var x, y, output = '',
    i = -1,
    l;

  if (str && str.length) {
    //  .... some other code
  }

  return output;
}
utf8Encode
将始终为ArrayBuffer返回一个空字符串,因为它没有
length
属性。即使将
utf8
更改为
false
,问题仍然会存在,因为它仍然需要字符串,并且由于缺少
长度而在另一个位置失败


空字符串的sha256是
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
,这是每个文件的sha256。

t.niese提供的解释是正确的。我正在发布它的解决方案

我使用来自的sha256sum库解决了这个问题

代码如下:

          .....
          // import the library
          var hash = sha256.hex(zipArrayBuffer);  // input arraybuffer
          console.log(hash);  // displays hash
          zipBlob = new Blob([new Uint8Array(zipBlob)]);  // convert to blob for reading
          .....

如果您使用
loadend
而不是
load
,会发生什么情况?您是对的。如果可以的话,我愿意搬到另一个图书馆去。有没有办法让这两个哈希匹配?@aswin1999没有,对不起。我从来没有要求计算散列客户端,所以我不能建议一个替代方案。服务器端呢?那我能做吗?
          .....
          // import the library
          var hash = sha256.hex(zipArrayBuffer);  // input arraybuffer
          console.log(hash);  // displays hash
          zipBlob = new Blob([new Uint8Array(zipBlob)]);  // convert to blob for reading
          .....