Хэш MD5 большого двоичного объекта, загруженный в Azure, не совпадает с тем же файлом на локальной машине
В настоящее время я работаю над загрузкой медиафайлов в хранилище BLOB-объектов Azure. Все работает нормально, за исключением случаев, когда я пытаюсь отобразить хэш MD5 загруженного носителя с локальным файлом (точно таким же, который был загружен). Локальный файл возвращает массив байтов, где находятся blob.Properties.ContentMD5 возвращает строку, и оба не совпадают.
Локальный хеш MD5: sÔ (F¦ ‚" "Db ~ [N
blob.Properties.ContentMD5: c9QoHkamgiKTRANifltOGQ ==
Любой возможный способ сопоставить оба эти?
1 ответ
Вот хорошая статья о том, как рассчитать и проверить контрольные суммы Blob MD5.
Я сталкивался с этим раньше, и я не знаю почему, но вы не можете просто сделать md5.computeHash(fileBytes)
, Для BLOB-объектов Azure используется следующий путь для получения хэша:
// 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.