我創建了一個Python程序,用於確定一個網站上的文件是否已經存在於我的電腦上(已下載),我的方式是確定該網站的MD5文件,然後將其與存儲在我的數據庫中的文件的MD5記錄。我擔心的是,如果在網站上對大文件進行嘗試,此過程將非常緩慢;所以只計算Web上文件的前1024個字節以確定它是否是重複文件是安全的?或者你是否有更簡單優雅或更快的方式來在Python中完成此操作。可以依賴基於文件的前1024個字節的MD5校驗和進行文件重複比較嗎?
0
A
回答
1
否;網頁在前1024個字節中相同並不罕見。例如,許多複雜的網站在HTML文件的頂部有JavaScript,CSS和樣板HTML,遠遠超過了您預算的1024字節。
對實際數據的一些實驗可能會揭示合理的緩衝區,但根本沒有辦法預測除了通過進行全文件比較之外,其他兩個完全相同的文件在最後一個字節中沒有差異。但是,如果你的輸入數據說不然(也許你比較的是個人的推文,例如?),那麼通過一切手段去。
許多Web服務器將包括一個服務器生成的ETag:
頭這可能是有用的,但它不是標準化的,和你知道的一切,他們可以很容易地欺騙你。
+0
即時檢查二進制文件重複如PDF,或AVI,這通常是相當大的,如果我將檢查整個文件的MD5它將像下載整個文件一樣,這不是一個選項,因爲我的互聯網連接速度很慢。也許增加1024到相當高的數字會減少重複的機會?我真的需要儘可能高效,因爲這將在循環中用於我的網頁抓取實驗。感謝您的回覆。 – 0x726364
相關問題
- 1. 文件MD5校驗和
- 2. MD5將文件轉換爲字節數組後的校驗和
- 3. DBMS_LOB.Compare VS MD5校驗比較
- 4. 整個文件的MD5校驗和不同於內容校驗和
- 5. 使用校驗和進行文件比較
- 6. 比較FTP文件和MD5
- 7. 校驗和函數依賴於Unicode嗎?
- 8. 校驗和比較可以指示不同的2個文件是多少?
- 9. 校驗和檢測重複文件和重命名文件
- 10. 基於比較文件名的前24個字符的重複文件查找程序
- 11. 上傳文件前使用JQuery文件上傳的校驗和md5
- 12. ESP8266 Arduino可以配置文件大小> 1024字節嗎?
- 13. 循環設備文件的校驗和完全可重現嗎?
- 14. 可以將GWT與基於JavaScript的框架進行比較嗎?
- 15. 比較依賴於操作系統的文件。 JUnit
- 16. 比較兩個.jpg文件:校驗和或字節到字節還是其他建議?
- 17. 使用多於1個緩衝區複製二進制文件會導致錯誤的md5校驗和
- 18. Azure中存儲的文件有不同的MD5校驗比本地文件(即同一個文件)
- 19. 將當前字符串與文本文件進行比較Java
- 20. 獲取文件的MD5校驗和的Javascript
- 21. 7zip文件的校驗和
- 22. zip文件的校驗和
- 23. 按字節比較兩個文件
- 24. 基於先前比較變量的值進行比較?
- 25. 比較兩個文本文件,以刪除較長的一個重複
- 26. Ant支持基於文件的依賴關係嗎?
- 27. 排序文件名基於依賴
- 28. 使用JavaME獲取文件的MD5校驗和
- 29. MD5使用FTP更改某些文件的校驗和Up-/Download
- 30. 如何計算Python中文件的md5校驗和?
僅比較文件的前1024個字節意味着將不會檢測到對第1025個字節或第1026個字節(等)的任何更改。這聽起來很健壯嗎? –
沒有。這並不安全。考慮一個很大的gif(比如說10,000 x 10,000),其中只有最後一個像素是不同的。兩個不同的文件,但這兩個文件的前1024個字節將是相同的,產生相同的MD5散列,因此在你的愚蠢檢查器誤報。md5()是一個非常快的散列。散列多文件文件的時間並不是那麼重要 –
在文件內容上嘗試使用SHA-1.Something git does –