2015-07-02 23 views
2

我目前正在上載Azure Blob存儲上的媒體。除了當我嘗試使用本地文件(與上傳的完全相同)上傳媒體的MD5哈希值時,所有工作都正常。本地文件返回一個字節數組,其中blob.Properties.ContentMD5返回一個字符串,兩者不匹配。在Azure上上傳的blob的MD5哈希不與本地計算機上的相同文件匹配

本地MD5哈希值: SO(F|「,「Db的〜[N

blob.Properties.ContentMD5: c9QoHkamgiKTRANifltOGQ ==

任何可能的方式來匹配這兩個

+3

嘗試將MD5字節數組轉換爲Base64字符串,看看是否匹配。 –

+0

它確實有用!謝謝 – Salman

回答

4

Here is a good article如何計算和檢查斑點MD5校驗碼。

我以前也遇到這個,我不知道爲什麼,但你CA不只是做md5.computeHash(fileBytes)。 對於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); 

和它的作品...

是的,正如Guarav已經提到 - MD5哈希值被保存爲base64字符串。

+1

謝謝。你的代碼返回與blob.Properties.ContentMD5相同的字符串。但是,我使用相同的代碼將源文件中的字節數組轉換爲Base64String,並且它可以工作! – Salman

+1

使用更新的'MD5.ComputeHash(Stream stream)'的較短版本的代碼示例可以在http://stackoverflow.com/a/43647643/411428找到 – Manfred

相關問題