Как проверить хэш MD5 хранилища BLOB-объектов Azure от клиента javascript?

Пользователи могут загружать файлы в хранилище BLOB-объектов Azure через мою службу веб-API. И у BLOB-объектов есть хеши MD5.

Теперь другой API позволяет пользователю загружать ранее загруженные файлы. API возвращает:

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

Таким образом, клиент javascript получает массив байтов с заголовком

Тип содержимого: приложение / поток октетов

Вопрос в том, как js-клиент проверяет, совпадает ли MD5 загруженного файла с тем, который был получен из большого двоичного объекта?

Я пробовал некоторые онлайн-инструменты MD5, и они не дают мне того же MD5, что и blob ...


person Allen Zhang    schedule 21.05.2018    source источник


Ответы (1)


Я пробовал некоторые онлайн-инструменты MD5, и они не дают мне того же MD5, что и blob.

Онлайн-система MD5 имеет разные алгоритмы с хешем 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!");
}

Также при загрузке большого двоичного объекта в хранилище, если вы установите validate_content (bool) значение true, он будет вычислять хэш MD5 для каждого фрагмента большого двоичного объекта.

Служба хранилища проверяет хэш содержимого, полученного вместе с отправленным хешем. Это в первую очередь полезно для обнаружения переворотов в сети, если используется http вместо https, поскольку https (по умолчанию) уже будет проверять. Обратите внимание, что этот хэш MD5 не хранится в большом двоичном объекте.

person Joey Cai    schedule 22.05.2018