0
public static string GetMD5HashFromFile(string fileName)
{
using(var md5 = MD5.Create())
{
try
{
using(var stream = File.OpenRead(fileName))
{
byte[] HashArray;
StringBuilder sb = new StringBuilder(256);
int i = 0;
sb.Append("0x");
HashArray = md5.ComputeHash(stream);
for(i = 0; i < HashArray.Length; i++)
{
sb = sb.Append(String.Format("{0:X2}", HashArray[i]));
}
return sb.ToString();
}
}
catch(Exception)
{
return null;
}
}
}
我想使用上面的GetMD5HashFromFile函數來獲取文件的哈希值,並檢查它們是否相同。如何檢查拖拽docx文件是否相同?
我創建了1.docx文件,並保存爲2.docx,我發現這兩個文件的散列不一樣。我不知道爲什麼,有人可以問我爲什麼,或給我一個小費來解決我的問題。
Docx文件本質上是Zip檔案。很可能,第二個文件中的Zip文件條目具有不同的日期/時間戳。根據您用來編寫docx文件的應用程序,也可能是第二個docx文件包含不同的元數據(例如關於上次保存/修改文檔的時間,文檔的作者,用於寫入的應用程序docx等等)比第一次docx。 – elgonzo
僅供參考1:初始化StringBuilder,初始容量爲256個字符。請注意,MD5是128位長或16字節。要以十六進制表示法表示16個字節,您只需要32個字符。所以你可以初始化你的StringBuilder,初始容量爲32. – elgonzo
僅供參考2:StringBuilder本身具有AppendFormat(...)重載格式字符串。所以你不需要使用string.Format,但可以簡單地做'sb.AppendFormat(「{0:X2}」,HashArray [i]);' – elgonzo