9

I am currently working on uploading media on Azure Blob storage. All is working fine except when i try to macth the MD5 hash of uploaded media with the local file (exactly same one which was uploaded). Local file returns a byte array where are blob.Properties.ContentMD5 returns a string and both do not match.

Local MD5 hash: sÔ(F¦‚"“Db~[N

blob.Properties.ContentMD5: c9QoHkamgiKTRANifltOGQ==

Any possible way to match both these?

Salman
  • 3,137
  • 4
  • 23
  • 31

1 Answers1

14

Here is a good article on how to calculate and check Blob MD5 checksums.

I have faced this before, and I don't know why, but you can'T just do md5.computeHash(fileBytes). For Azure Blobs, it uses the following path to get the hash:

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

and it works...

And yes, as Guarav already mentioned - MD5 hash is saved as base64 string.

astaykov
  • 30,768
  • 3
  • 70
  • 86
  • 1
    Thanks. Your code returns the same string as blob.Properties.ContentMD5. However, i used the same code to convert the byte array from source file to Base64String and it works! – Salman Jul 03 '15 at 07:07
  • 2
    Code example for a shorter version using the newer `MD5.ComputeHash(Stream stream)` can be found at http://stackoverflow.com/a/43647643/411428 – Manfred Apr 27 '17 at 02:29
  • It looks like that article is no longer available on the blog. [Here](https://web.archive.org/web/20150603235401/http://blogs.msdn.com/b/windowsazurestorage/archive/2011/02/18/windows-azure-blob-md5-overview.aspx) is an archive copy from when this answer was posted. – Myles Dec 10 '21 at 12:25