Il modo più veloce è solo per confrontare il codice hash di file con le stesse dimensioni.
Questa è l'idea di questa risposta su SO (vedi la seconda riga di comando e le sue spiegazioni).
Non ci sono problemi di sicurezza durante il rilevamento di file duplicati, quindi consiglierei un codice di hashing veloce. Ad esempio il progetto ccache utilizza MD4:
ccache uses MD4, a very fast cryptographic hash algorithm, for the hashing.
(MD4 is nowadays too weak to be useful in cryptographic contexts,
but it should be safe enough to be used to identify recompilations.)
Se due file hanno le stesse dimensioni e lo stesso codice hash, probabilmente sono uguali. Ma ci sarà ancora una piccola possibilità che questi due file siano diversi (eccetto se la dimensione del file è inferiore alla dimensione del codice hash).
Come suggerisci nella tua domanda, i falsi positivi possono accadere più frequentemente in quanto le dimensioni del file sono maggiori.
Ci sono due opzioni per risolvere il problema dei file di grandi dimensioni:
- Utilizza un secondo codice hash per file di grandi dimensioni (ad esempio MD4 e MD5).
- Utilizza un codice hash di lunghezza dinamica
Il limite per considerare un file sufficientemente grande da richiedere un secondo controllo dipende da quanto è critica l'applicazione.
Infine, il modo più sicuro di procedere è:
- Rileva i file con le stesse dimensioni
- Se stessa dimensione = > confronta i loro codici hash (già calcolati)
- Se stessa dimensione e stesso codice hash = > confronta il contenuto completo