Je veux créer un moyen rapide de détecter si un fichier peut ou non être le même. Pour une sécurité de près de 100%, j'utiliserais un algorithme de hachage existant, par exemple SHA256. Cependant, les fichiers devraient être des fichiers vidéo énormes avec plusieurs Go, donc le calcul du hachage SHA256 pourrait prendre un certain temps, en particulier sur le réseau.
Je souhaite donc combiner différentes autres techniques:
- taille du fichier: si la taille du fichier a changé, le contenu a changé (bien sûr)
- hachage tête / queue
- hachage aléatoire
Les 2 derniers font partie de ma question:
Je suppose que dans l'en-tête il y a des choses comme:
- fréquences d'images (par exemple, vidéos)
- résolution (p. ex. vidéos, images)
- (fichier) longueur (par exemple dans les cadres, pixels, etc.)
- dernière date de modification (par exemple, des documents Word, pas spécifiquement des vidéos)
Pourquoi je considère la vérification de la queue:
- MP3 contient les informations d'étiquette
- EXIF ajoute des données personnalisées à la fin si j'ai raison
Les hachages aléatoires sélectionneraient par exemple 126 régions à des positions aléatoires dans le fichier avec une longueur spécifique, par exemple 64 Ko et créeraient un hachage pour elles. Bien sûr, je me souviens des décalages pour une comparaison ultérieure. Dans l'ensemble, j'utiliserais (1 + 126 + 1) * 64 Ko de données pour mon hachage, j'ai donc besoin de lire seulement 8 Mo au lieu de plusieurs Go pour obtenir le hachage.
C'est peut-être plus une question mathématique maintenant, mais: quelle est la probabilité de détecter un changement en utilisant la combinaison de la taille du fichier, de la tête, de la queue et des données aléatoires pour générer cette somme de hachage rapide?
Je suppose que les fichiers sont toujours des fichiers légaux. Il n'y a aucun avantage à manipuler des octets uniques. L'utilisateur utiliserait un outil d'édition vidéo normal pour modifier les fichiers.
MISE À JOUR : J'ai refusé cette réponse qui venait de Crypto.StackExchange. J'accepte que ma proposition ne soit pas cryptographique et ne soit pas destinée à être sécurisée. Je suis également d'accord que CRCing un fichier est rapide, mais dans mon cas, j'ai vraiment besoin d'un hachage - je vais expliquer pourquoi:
- On s'attend à ce que mon application enregistre des signets dans des vidéos. Ma base de données devrait enregistrer le hachage vidéo et les signets.
- Les utilisateurs déplacent ou renomment parfois des fichiers. Mon programme remarquera qu'un fichier n'existe plus, mais ne supprimera pas les signets de la base de données. Au lieu de cela, lorsque la même vidéo est (accidentellement) rejouée, je veux reconnaître que c'est (probablement) le même fichier.
- Les utilisateurs sont censés enregistrer des fichiers sur des lecteurs réseau (NAS) et diffuser des vidéos. Ce sont des stockages stupides. Je ne peux pas installer de composant serveur. Et ils peuvent être assez lents, donc je ne veux vraiment pas le hachage complet. Le calcul d'un hachage complet sur un fichier de 3 Go prend au moins 5 minutes à 10 Mo / s, quelle que soit la vitesse de l'algorithme de hachage.
- Si l'utilisateur a édité le fichier, j'espère que le hachage ne correspondra plus, car sinon j'afficherais de mauvais signets.
Je serais d'accord avec ~ 80% de chances d'avoir les bons signets. Combien de morceaux de hachage dois-je assembler et où serait-il dans le fichier?