如何从 JavaScript 客户端验证 Azure Blob 存储 md5 哈希?



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

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

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

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

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

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

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

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

联机 MD5对blob MD5 哈希具有不同的算法

下面的示例演示客户端如何在检索所有数据后验证 blob MD5 哈希。

// 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 一起存储。

最新更新