MD5 хеш blob, загруженный на Azure, не совпадает с тем же файлом на локальной машине

В настоящее время я работаю над загрузкой носителей на хранилище Azure Blob. Все работает отлично, за исключением случаев, когда я пытаюсь обработать хэш файл MD5 загруженного носителя с локальным файлом (точно таким же, который был загружен). Локальный файл возвращает массив байтов, где находятся blob.Properties.ContentMD5 возвращает строку, и оба они не совпадают.

Локальный хеш MD5: sÔ (F|, "" Db ~ [N

blob.Properties.ContentMD5: c9QoHkamgiKTRANifltOGQ ==

Любой возможный способ сопоставить оба эти?

Ответ 1

Вот хорошая статья о том, как рассчитать и проверить контрольные суммы Blob MD5.

Я столкнулся с этим раньше, и я не знаю почему, но вы не можете просто сделать md5.computeHash(fileBytes). Для Azure Blobs он использует следующий путь для получения хэша:

// 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);

и он работает...

И да, как уже упоминал Гуавар - хеш MD5 сохраняется как строка base64.