如何从javascript客户端验证azure blob存储md5哈希?

时间:2018-05-21 09:09:51

标签: javascript md5 azure-storage-blobs

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

现在,另一个API可让用户下载之前上传的文件。 API返回:

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

因此javascript客户端接收带有标题

的字节数组
  

Content-Type:application / octet-stream

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

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

1 个答案:

答案 0 :(得分:0)

  

我尝试了一些在线MD5工具,他们没有给我与blob相同的MD5。

在线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(默认值)已经验证。请注意,此MD5哈希不与blob一起存储。