【问题标题】:How to validate azure blob storage md5 hash from javascript client?如何从 javascript 客户端验证 azure blob 存储 md5 哈希?
【发布时间】:2018-10-30 21:46:44
【问题描述】:

用户可以通过我的 Web API 服务将文件上传到 Azure Blob 存储。并且 blob 具有 MD5 哈希值。

现在另一个 API 允许用户下载他们之前上传的文件。 API 返回:

return File(blobFile, MediaTypeNames.Application.Octet, file.FileName);

所以 javascript 客户端接收到一个带有标头的字节数组

内容类型:应用程序/八位字节流

问题是js客户端如何验证下载文件的MD5是否与来自blob的MD5匹配?

我尝试了一些在线 MD5 工具,但它们给我的 MD5 与 blob 不同...

【问题讨论】:

  • 请注意,大文件可能没有“免费”设置 MD5 属性:stackoverflow.com/a/69319211/32453 我想知道数据是否是二进制的,所以你没有看到它排列?

标签: javascript md5 azure-blob-storage


【解决方案1】:

我尝试了一些在线 MD5 工具,但它们提供的 MD5 与 blob 不同。

在线 MD5 具有 具有 blob MD5 哈希的不同算法

下面的示例显示了客户端如何在检索到所有数据后validate the blobs MD5 hash

// Validate MD5 Value
var md5Check = System.Security.Cryptography.MD5.Create();
md5Check.TransformBlock(retrievedBuffer, 0, retrievedBuffer.Length, null, 0);     
md5Check.TransformFinalBlock(new byte[0], 0, 0);

// Get Hash Value
byte[] hashBytes = md5Check.Hash;
string hashVal = Convert.ToBase64String(hashBytes);

if (hashVal != blobRef.Properties.ContentMD5) 
{
     throw new InvalidDataException("MD5 Mismatch, Data is corrupted!");
}

此外,当您将 blob 上传到存储时,如果将 validate_content(bool) 参数设置为 true,它将为 blob 的每个块计算 MD5 哈希。

存储服务使用已发送的哈希检查已到达内容的哈希。如果使用 http 而不是 https 因为 https(默认值)已经验证,这对于检测线路上的 bitflip 很有价值。请注意,此 MD5 哈希不与 blob 一起存储。

【讨论】:

  • 我相信他问的是javascript?
猜你喜欢
  • 2016-10-27
  • 2022-12-15
  • 2016-06-13
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
相关资源
最近更新 更多