Хэш 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.

Другие вопросы по тегам