2017-02-18 87 views

回答

0

您可以散列這些文件並通過網絡比較散列。

一個好的散列函數被設計成如果函數的輸入只有一點區別,那麼輸出將是完全不同的。此外,大多數散列函數現在具有160-512位的輸出長度。這意味着儘管你可能想要比較幾個千兆字節大的兩個文件,但你只需要在網絡上發送一個512位的小字符串來查看哈希值是否匹配。

如果你有幾百萬個文件,這可能已經很多了。一種解決方案是這樣的:

  1. 散列每個文件的每臺計算機上
  2. 然後串連的散列和散列連接字符串再次
  3. 如果它不同於你知道,這是有區別的現在比較這個輸出在那些文件中。
  4. 要查找的文件不同(甚至確切位置在文件中),你可以使用二進制搜索:
  5. 斯普利特百萬計的文件分爲兩個部分,現在轉到步驟1-3(如果你有足夠的空間,你可以保存每個文件的散列以加快速度)。
  6. 現在對於不同的兩個散列中的每一個,遞歸地進行步驟4-6。
  7. 如果你找到了不同的文件,你可以再次按照行數分割文件,並像4-6中那樣工作。
  8. 在某些時候,行數將會很小,以至於散列可能會比行的實際內容更長。現在,以天真的方式比較實際內容當然更有效率。

假設你只有一個不同的文件,只需要在網絡上發送對數許多散列,從而最大限度地減少網絡流量。

+0

謝謝...您能否詳細說明一下我在面試中被問及與Web安全相關的位置(顯然我不適合)。讓我重新修改這個問題: 這兩個系統中的數百萬個文件和網絡速度很慢,我們如何檢查是否有一個字符在任何一個文件中都是錯誤的 –

+0

@VivekKumar請參閱我的編輯 –

0

一個想法是爲每個文件生成一個散列。散列將任意長度的文件轉換爲固定大小。你可以進一步散列哈希,然後上傳並比較。散列是廣泛使用的,以確保下載不被破壞。

+0

謝謝......您能請詳細說明一下我在面試中被問及與Web安全相關的問題(顯然我不適合)。讓我重新解釋一下這個問題:這是兩個系統中的數百萬個文件,網絡速度很慢,我們如何檢查一個文件中是否有一個字符是錯誤的 –

+0

您想要查找特定字符還是隻需查找文件與錯位的性格? –

相關問題