【问题标题】:Azure storage Node.js SDK - MD5 hash not the same as localAzure 存储 Node.js SDK - MD5 哈希与本地不同
【发布时间】:2021-08-08 11:11:28
【问题描述】:

我确实阅读了 SO 中的其他线程,但没有任何帮助。

blobService.getBlobProperties("qauploads", "brand.gif", function(err, properties, status) {

  let buff = new Buffer(properties.contentSettings.contentMD5);
  let base64data = buff.toString('base64');
  console.log("remote " + base64data)
})

  fileHash('md5', "temp/brand.gif").then(res => {
      console.log("local "+ res)
  })



function fileHash(algorithm, path) {
  return new Promise((resolve, reject) => {
    // Algorithm depends on availability of OpenSSL on platform
    // Another algorithms: 'sha1', 'md5', 'sha256', 'sha512' ...
    let shasum = crypto.createHash(algorithm);
    try {
      let s = fs.ReadStream(path)
      s.on('data', function (data) {
        shasum.update(data)
      })
      // making digest
      s.on('end', function () {
        const hash = shasum.digest('hex')
        return resolve(hash);
      })
    } catch (error) {
      return reject('calc fail');
    }
  });
}

输出:

local 8112398e797d24a66e66d149c4962733
remote Z1JJNWpubDlKS1p1WnRGSnhKWW5Ndz09

但它们是完全相同的文件!当我手动下载它并检查它的哈希时,它与本地相同。

我不知道怎么了。

【问题讨论】:

    标签: node.js azure-storage


    【解决方案1】:

    请试试这个代码:

    function fileHash(algorithm, path) {
      return new Promise((resolve, reject) => {
        // Algorithm depends on availability of OpenSSL on platform
        // Another algorithms: 'sha1', 'md5', 'sha256', 'sha512' ...
        try {
          const input = fs.createReadStream(path);
          const output = crypto.createHash(algorithm);
    
          output.once('readable', () => {
            const md5 = output.read().toString('base64');
            resolve(md5);
          });
    
          input.pipe(output);
        } catch (error) {
          return reject('calc fail');
        }
      });
    }
    

    我针对存储帐户中的一个 blob 对其进行了测试,并且两者都匹配。

    【讨论】:

    • 遗憾的是它没有,我也尝试过相反的方法(将它们都作为base64,在散列函数和上面提到的行中,仍然不匹配。
    • 更新了我的答案。请尝试一下。
    • 它无需将远程的 md5 字符串解析为 base64 即可工作
    • 我认为您计算 MD5 哈希的方式存在问题。我很高兴听到它运作良好。
    猜你喜欢
    • 1970-01-01
    • 2014-05-19
    • 2012-11-13
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    相关资源
    最近更新 更多