Les fichiers portant le même nom ne représentent pas la même copie : utilisez le hachage du contenu pour identifier l'entrée

Le client a envoyé deux documents, tous deux nommés `final.pdf`, lequel a été traduit ? Il est dangereux de se fier aux noms de fichiers pour répondre à cette question. Les fichiers portant le même nom peuvent avoir un contenu différent et les fichiers dont le nom a été modifié peuvent avoir les mêmes octets. Les hachages de contenu conviennent pour établir des correspondances de versions, mais ne doivent pas avoir une signification qu'ils n'ont pas.

Les fichiers portant le même nom ne sont pas nécessairement les mêmes et les fichiers dont le nom a été modifié peuvent avoir exactement le même contenu. Si une équipe s'appuie sur les noms de fichiers pour suivre les traductions, il est facile de se tromper de version. Cet article explique comment utiliser le hachage de contenu pour laisser des empreintes digitales d'entrée et de sortie au niveau des octets, et ce que le hachage peut et ne peut pas prouver.

Les exemples utilisent des échantillons synthétiques pour démontrer les méthodes de traitement. Le code a uniquement été testé dans un environnement isolé et ne représente pas une garantie de tous les fichiers réels ou effets du produit. Avant de traiter des documents importants, veuillez conserver les originaux et les examiner en fonction des limites et des éléments d'acceptation du texte.

Pourquoi les noms de fichiers ne sont-ils pas fiables ? Conclusion en une phrase

Utilisez le hachage du contenu pour correspondre à la version et le nom du fichier est uniquement à titre de référence. Le tableau suivant explique ce qu'il faut faire dans des situations courantes.

votre situationPratiques recommandéesraison
Les deux documents s'appellent final.pdfComparez les résumés SHA-256, pas les noms de fichiersLe contenu des fichiers portant le même nom peut être différent
Le fichier a été renomméUtilisez digest pour confirmer s'il s'agit du même contenu en octetsLe nom ne participe pas au résumé d'octets
Besoin de confirmer à quelle entrée correspond la traductionEnregistrer séparément les résumés des entrées et des sortiesL'entrée et la sortie sont des contenus d'octets différents
Les fichiers peuvent être réenregistrés ou les métadonnées peuvent être écraséesRéenregistrer en tant que nouveau contenu d'octetLes modifications des métadonnées ou des paramètres de compression peuvent affecter les hachages

Laisser une empreinte digitale d'octet pour l'entrée

SHA-256 calcule le résumé en fonction des octets du fichier. Les fichiers volumineux peuvent être lus en morceaux sans avoir à être chargés en mémoire d’un seul coup. Le résultat du hachage n'a rien à voir avec la taille du fragment, le regroupement est simplement une stratégie de lecture et ne fait pas partie de l'identité du fichier. Les flux mémoire ci-dessous sont des échantillons synthétiques et ne contiennent pas de vrais documents.

Utilisez le même contenu et des blocs différents pour vérifier l'implémentation

import hashlib
from io import BytesIO

def digest(stream, chunk_size=65536):
    if type(chunk_size) is not int or chunk_size <= 0:
        raise ValueError("positive chunk size required")
    h = hashlib.sha256()
    while block := stream.read(chunk_size):
        h.update(block)
    return h.hexdigest()

raw = b"synthetic document version A\n"
a = digest(BytesIO(raw), 3)
assert a == digest(BytesIO(raw), 4096)
assert a == hashlib.sha256(raw).hexdigest()
assert a != digest(BytesIO(raw.replace(b"A", b"B")))
assert digest(BytesIO(b"")) == hashlib.sha256(b"").hexdigest()
try:
    digest(BytesIO(raw), 0)
except ValueError:
    pass
else:
    raise AssertionError("zero chunk must be rejected")

La fonction commence la lecture à partir de la position actuelle du flux. Avant de passer l'appel formel, il convient de préciser si le flux se trouve au début. Si l'analyseur a déjà lu une partie du contenu, le résultat du calcul direct n'est pas le "hachage complet du fichier". L'approche la plus sûre consiste à activer individuellement l'entrée en lecture seule ou à la réinitialiser explicitement avant de la calculer sur un flux ciblable.

Quelle est la différence entre les mêmes octets et le même contenu ?

Le hachage indique uniquement si les octets sont cohérents et différentes opérations ont des effets différents sur celui-ci.

ConditionComment le hachage pourrait changerComment expliquer
Changez uniquement le nom du fichierconstanteLe nom ne participe pas au résumé d'octets
Les métadonnées PDF sont réécritesChangeThe page looks the same or may be different
Resave the compressed packageChangeCompression parameters or timestamps can affect bytes
Translate into another languageUsually changeInput and output should be recorded separately

# Core comparison

Judgment modeWhat does that mean?It doesn't mean anything.
Compare file namesIt can only mean the same name.Is the content consistent?
Compare SHA-256 feedsIs the byte content exactly the same?Whether you have the right to use the file, or whether you have copyright

# which method is suitable for you?

if you need to confirm whether the two documents are consistent

Compare the SHA-256 summary, the same description byte content is the same, the file name is not used as the basis.

if you need to track the source of translation

Record the input summary and output summary respectively, and then associate the language and terminology version.

if you plan to use hash to determine file permissions

Don't do this. Hash is not a permission credential and requires additional access control.

# frequently asked questions (FAQ)

1. Will the hash change after changing the file name?

No, I won't. The name does not participate in the byte summary, and the file hash that only changes the file name remains the same.

2. The page looks the same, does the hash have to be the same?

Not necessarily. When PDF metadata is rewritten, the hash may change, even if the page appears the same.

3. Can you use hash to determine whether the user has the right to download the file?

No, I can't. Knowing the summary of the file does not mean you have the right to download it, nor does it mean that you have copyright.

4. What is the risk of cross-tenant resurrection?

Information about whether a file already exists may be disclosed, so access control still needs to be done after a cache hit.

# Translation list starts here

Record the input summary before sending the file to OmniDoc (Product Import); after downloading the translation, record the output summary and associate the language and terminology version. After that, if a colleague reports that "the result is wrong," both parties can first confirm that they are checking the same set of files without having to guess repeatedly around multiple final file names.

Références : Python hashlib.

# Summary

The same name does not represent the same copy, and the file name can only be used as a reference. Recording input and output with a content hash allows the team to align the file itself before discussing the translation results.

Experience now: upload the document and start translation, keeping the original typesetting

Mis à jour le 2026-11-11