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 situation | Pratiques recommandées | raison |
|---|---|---|
Les deux documents s'appellent final.pdf | Comparez les résumés SHA-256, pas les noms de fichiers | Le 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 octets | Le nom ne participe pas au résumé d'octets |
| Besoin de confirmer à quelle entrée correspond la traduction | Enregistrer séparément les résumés des entrées et des sorties | L'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ées | Réenregistrer en tant que nouveau contenu d'octet | Les 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.
| Condition | Comment le hachage pourrait changer | Comment expliquer |
|---|---|---|
| Changez uniquement le nom du fichier | constante | Le nom ne participe pas au résumé d'octets |
| Les métadonnées PDF sont réécrites | Change | The page looks the same or may be different |
| Resave the compressed package | Change | Compression parameters or timestamps can affect bytes |
| Translate into another language | Usually change | Input and output should be recorded separately |
# Core comparison
| Judgment mode | What does that mean? | It doesn't mean anything. |
|---|---|---|
| Compare file names | It can only mean the same name. | Is the content consistent? |
| Compare SHA-256 feeds | Is 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


