2017-05-13 3 views
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として保存します。この2つのファイルのハッシュが同じでないことがわかります。私はなぜ、誰かが私に質問したり、私の質問を解決するためのヒントを与えたりすることができる理由はわかりません。

+1

Docxファイルは基本的にZipアーカイブです。おそらく、2番目のファイルのZipファイルエントリには、異なる日付/タイムスタンプがあります。 docxファイルの作成に使用したアプリケーションによっては、2番目のdocxファイルに異なるメタデータが含まれていることもあります(たとえば、最後に文書が保存/変更された時期、文書の作者、 docxなど)を最初のdocxよりも優先します。 – elgonzo

+0

FYI 1:StringBuilderを初期容量256文字で初期化します。 MD5は128ビット長、つまり16バイトであることに注意してください。 16進表記で16バイトを表現するには、32文字しか必要ありません。したがって、初期容量32でStringBuilderを初期化することができます。 – elgonzo

+0

FYI 2:StringBuilder自体に、書式文字列を使用したAppendFormat(...)オーバーロードがあります。したがって、string.Formatを使用する必要はありませんが、単純に 'sb.AppendFormat(" {0:X2} "、HashArray [i]);' – elgonzo

答えて

0

thx elgonzoただし、プロンプトで問題を解決することはできません。 少なくとも、私はそれがzipファイルであることを知っていて、それを解凍すると、私はdocument.xmlを取得します。私は異なったものを見つけました。 different between two xml

私はいくつかのコード記述:

  string aLastName = fileName.Substring(fileName.LastIndexOf(".") + 1, 
      (fileName.Length - fileName.LastIndexOf(".") - 1)); 
     if (aLastName.ToLower() == "docx") 
     { 
      WordprocessingDocument doc = WordprocessingDocument.Open(fileName, false); 
      string strText = doc.MainDocumentPart.Document.InnerText; 

      return GetMD5HashFromStream(String2Stream(strText)); 
     } 

をしかし、私はそれは同じだ場合はXMLが言うことができるので、それは良いアイデアだとは思いません。

関連する問題