2011-02-24 48 views
0

我得到了以下問題。我通過WCF服務上傳csv和excel文件。散列計算僅適用於csv文件。有了xls文件,每次上傳都會得到不同的價值。SHA-1上傳的xls文件的哈希總是不一樣,用csv文件哈希工作

哈希計算:

  using (FileStream file = new FileStream(datei.FullName, FileMode.Open)) 
      { 
       var sha1 = new SHA1CryptoServiceProvider(); 
       byte[] retVal = sha1.ComputeHash(file); 
       var sb = new StringBuilder(); 
       foreach (var b in retVal) 
        sb.Append(b.ToString("x2")); 

       return sb.ToString(); 
      } 

有誰知道哪裏出了問題可能會在什麼位置?這是二進制xls文件格式的問題嗎?

任何幫助深表謝意。

馬呂斯

+1

在2個XLS文件之間運行差異。也許Excel或Windows正在更新類似時間戳的東西。 – leppie 2011-02-24 07:15:43

回答

2

我強烈懷疑該文件每次實際上是不同。這很容易檢查 - 有各種免費工具執行校驗和/散列。您可以選擇SHA1並將其與您自己的結果進行比較,或使用MD5工具等。

嘗試在客戶端和服務器端運行它 - 這樣您就可以驗證文件本身是否已被在運輸中損壞。

確定文件發生更改的位置和時間後,您需要決定如何處理。例如,如果Excel 添加時間戳,則可能希望在計算散列時將其屏蔽掉。

+0

我使用JDigest驗證了校驗和。事實上,我收到了我之前用C#計算的相同的哈希碼。 – user631833 2011-02-24 07:33:45

+0

@ user631833:您的意思是您是否對照您收到的文件或客戶端上的原始文件對其進行了驗證? – 2011-02-24 07:34:33

+0

客戶端上的文件具有與上傳文件不同的散列值。計算出的哈希碼是正確的,因此實際上文件中有更改。由於沒有任何形式的變革,我無法在變化的情況下做出改變。計算不考慮文件名或修改時間戳,還是它? – user631833 2011-02-24 07:45:30