2013-06-25 38 views
0

我創建了一個Python程序,用於確定一個網站上的文件是否已經存在於我的電腦上(已下載),我的方式是確定該網站的MD5文件,然後將其與存儲在我的數據庫中的文件的MD5記錄。我擔心的是,如果在網站上對大文件進行嘗試,此過程將非常緩慢;所以只計算Web上文件的前1024個字節以確定它是否是重複文件是安全的?或者你是否有更簡單優雅或更快的方式來在Python中完成此操作。可以依賴基於文件的前1024個字節的MD5校驗和進行文件重複比較嗎?

+2

僅比較文件的前1024個字節意味着將不會檢測到對第1025個字節或第1026個字節(等)的任何更改。這聽起來很健壯嗎? –

+2

沒有。這並不安全。考慮一個很大的gif(比如說10,000 x 10,000),其中只有最後一個像素是不同的。兩個不同的文件,但這兩個文件的前1024個字節將是相同的,產生相同的MD5散列,因此在你的愚蠢檢查器誤報。md5()是一個非常快的散列。散列多文件文件的時間並不是那麼重要 –

+0

在文件內容上嘗試使用SHA-1.Something git does –

回答

1

否;網頁在前1024個字節中相同並不罕見。例如,許多複雜的網站在HTML文件的頂部有JavaScript,CSS和樣板HTML,遠遠超過了您預算的1024字節。

對實際數據的一些實驗可能會揭示合理的緩衝區,但根本沒有辦法預測除了通過進行全文件比較之外,其他兩個完全相同的文件在最後一個字節中沒有差異。但是,如果你的輸入數據說不然(也許你比較的是個人的推文,例如?),那麼通過一切手段去。

許多Web服務器將包括一個服務器生成的ETag:頭這可能是有用的,但它不是標準化的,和你知道的一切,他們可以很容易地欺騙你。

+0

即時檢查二進制文件重複如PDF,或AVI,這通常是相當大的,如果我將檢查整個文件的MD5它將像下載整個文件一樣,這不是一個選項,因爲我的互聯網連接速度很慢。也許增加1024到相當高的數字會減少重複的機會?我真的需要儘可能高效,因爲這將在循環中用於我的網頁抓取實驗。感謝您的回覆。 – 0x726364

相關問題