Soubory se stejným názvem nepředstavují stejnou kopii: k identifikaci vstupu použijte hash obsahu
Klient poslal dva dokumenty, oba se jmenovaly `final.pdf`, který z nich byl přeložen? Při zodpovězení této otázky je nebezpečné spoléhat se na názvy souborů. Soubory se stejným názvem mohou mít odlišný obsah a soubory se změněnými názvy mohou mít stejné bajty. Hodnoty hash obsahu jsou vhodné pro stanovení korespondence verzí, ale neměl by jim být přikládán význam, který nemají.
Soubory se stejným názvem nemusí být nutně stejné a soubory se změněnými názvy mohou mít přesně stejný obsah. Pokud se tým při sledování překladů spoléhá na názvy souborů, je snadné získat špatnou verzi. Tento článek vysvětluje, jak pomocí hašování obsahu zanechat otisky vstupu a výstupu na úrovni bajtů a co hash může a nemůže prokázat.
Příklady používají syntetické vzorky k demonstraci metod zpracování. Kód byl testován pouze v izolovaném prostředí a nepředstavuje záruku všech skutečných souborů nebo efektů produktu. Před zpracováním důležitých dokumentů si prosím uschovejte originály a zkontrolujte je podle hranic a přejímacích položek v textu.
Proč jsou názvy souborů nespolehlivé? Závěr jednou větou
Použijte hash obsahu, aby odpovídal verzi a název souboru je pouze orientační. Následující tabulka vysvětluje, co dělat v běžných situacích.
| vaší situaci | Doporučené postupy | důvod |
|---|---|---|
Oba dokumenty se nazývají final.pdf | Porovnejte výtahy SHA-256, nikoli názvy souborů | Obsah souborů se stejným názvem se může lišit |
| Soubor byl přejmenován | Pomocí výtahu potvrďte, zda se jedná o stejný obsah bajtu | Název se neúčastní bajtového digestu |
| Je třeba potvrdit, kterému vstupu překlad odpovídá | Zaznamenávejte souhrny vstupů a výstupů samostatně | Vstup a výstup jsou různé obsahy bajtů |
| Soubory mohou být znovu uloženy nebo mohou být přepsána metadata | Znovu nahrát jako nový obsah bajtu | Změny v metadatech nebo parametrech komprese mohou ovlivnit hodnoty hash |
Zanechte otisk bajtu pro vstup
SHA-256 počítá výtah na základě bajtů souboru. Velké soubory lze číst po částech, aniž by bylo nutné je načítat do paměti najednou. Výsledek hash nemá nic společného s velikostí chunků, chunking je pouze strategie čtení a není součástí identity souboru. Níže uvedené paměťové toky jsou syntetické vzorky a neobsahují skutečné dokumenty.
Pro ověření implementace použijte stejný obsah a různé bloky
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")
Funkce začne číst od aktuální pozice streamu. Před formálním voláním by mělo být jasné, zda je stream na začátku. Pokud parser již přečetl část obsahu, výsledkem přímého výpočtu není „hash celého souboru". Nejbezpečnějším přístupem je zapnout vstup pouze pro čtení jednotlivě nebo jej explicitně resetovat před jeho výpočtem pro cílový stream.
Jaký je rozdíl mezi stejnými bajty a stejným obsahem?
Hash pouze odráží, zda jsou bajty konzistentní a různé operace na něj mají různé účinky.
| Situace | Jak se hash může změnit | Jak to vysvětlit |
|---|---|---|
| Měňte pouze název souboru | a nezměnila se | Jména se neúčastní byte abstractů |
| Metadata PDF byla přepsána | Změna | Stránka může vypadat stejně nebo odlišně |
| Znovu uložte komprimovaný soubor | Změna | Kompresní parametry nebo časová razítka mohou ovlivnit bajty |
| Přelož do jiného jazyka | Obvykle se věci mění | Vstup a výstup by měly být nahrávány samostatně |
📊 Srovnání jádra
| Metody hodnocení | Co může říct? | Nic to nedokazuje |
|---|---|---|
| Porovnat názvy souborů | To jen znamená, že jména jsou stejná | Zda je obsah konzistentní |
| Srovnání shrnutí SHA-256 | Zkontrolujte, zda je obsah ByteDance přesně stejný | Zda máte právo dokument používat, nebo zda vlastníte autorská práva |
🎯 Která metoda ti vyhovuje?
Pokud potřebujete potvrdit, zda jsou oba dokumenty konzistentní
Při porovnání souhrnů SHA-256 jsou abstrakty stejné, ale obsahují stejný obsah instruktážních bajtů, takže název souboru není použit jako reference.
Pokud potřebujete vystopovat zdroj svého překladu
Samostatně zaznamenávejte vstupní a výstupní souhrny, poté připojte jazykové a terminologické verze.
Pokud plánujete použít hash k určení oprávnění souborů
Nedělej to. Hash není oprávnění a vyžaduje samostatnou kontrolu přístupu.
❓ Často kladené otázky (FAQ)
1. Změna názvu souboru změní hash?
Ne. Název se neúčastní souhrnu bajtů; změní se pouze název souboru a hash zůstává nezměněn.
2. Jen proto, že stránka vypadá stejně, musí být hash vždy stejný?
Nemusí to tak být. Když jsou metadata PDF přepisována, hash se může změnit, i když stránka zobrazuje stejně.
3. Mohou hashe určovat, zda mají uživatelé právo stahovat soubory?
Ne. Znát shrnutí souboru neznamená, že máte právo ho stáhnout, ani neznamená, že vlastníte autorská práva.
4. Jaká jsou rizika deduplikace mezi nájemci?
Může uniknout informace o tom, "zda soubor již existuje", takže kontrola přístupu musí být aplikována i po doručení cache.
Seznam překladů začíná tady
Před odesláním souboru do OmniDoc (produktový záznam) si zaznamenejte vstupní souhrn; Po stažení překladu zaznamenejte výstupní abstrakt a spojte jej s jazykovými a terminologickými verzemi. Pokud kolega později nahlásí, že "výsledek je nesprávný", obě strany mohou nejprve potvrdit, že se kontroluje stejná sada souborů, místo aby opakovaně hádaly více final názvů souborů.
Zdroje: Python hashlib.
📝 Shrnutí
Stejný název neznamená stejnou kopii; názvy souborů slouží pouze pro referenci. Použití hashů obsahu pro zaznamenávání vstupu a výstupu umožňuje týmům nejprve zarovnat soubor a poté diskutovat o výsledcích překladu.
Zkušenost nyní: Nahrajte svůj dokument a začněte s překladem, přičemž zachováte původní formátování


