2017-05-13 1 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로 저장하십시오.이 두 파일의 해시가 동일하지 않습니다. 나는 왜, 누군가가 내게 질문 할 수 있는지 또는 내 질문을 해결하기위한 팁을 줄 수 있는지를 모른다.

+1

Docx 파일은 기본적으로 Zip 아카이브입니다. 두 번째 파일의 Zip 파일 항목에는 날짜/시간 소인이 서로 다를 수 있습니다. docx 파일을 작성하는 데 사용한 응용 프로그램에 따라 두 번째 docx 파일에 다른 메타 데이터가 포함되어있을 수도 있습니다 (예 : 마지막으로 문서를 저장/수정 한 시점, 문서 작성자, 응용 프로그램 작성자 docx, etc ...) 첫 번째 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,하지만 프롬프트가 문제를 해결하지 못합니다. 적어도 압축 파일이고 압축을 풀면 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 말할 수 있기 때문에 좋은 아이디어라고 생각하지 않습니다.