Python ile dosya SHA-256 özeti: video tesliminde bütünlük kontrolü
Büyük video dosyalarını parça parça okuyarak SHA-256 özeti hesaplayın; kopyanın değişip değişmediğini doğrulayın.

Python ile dosya SHA-256 özeti — uygulama akışı
Kaynağı tamamla
Dışa aktarım bitmeden özet hesaplama.
Parça parça oku
Büyük dosyayı küçük bloklarla SHA-256 işlemine ver.
Kopyayı karşılaştır
Bütün özet değerini güvenilir referansla eşleştir.
Teslimi doğrula
Teknik bütünlüğün yanında video ve ses içeriğini de incele.
Bu şema rehber için hazırlanmış özgün bir iş akışıdır; uygulama ekran görüntüsü değildir.
Kısa özet
Büyük video dosyalarını parça parça okuyarak SHA-256 özeti hesaplayın; kopyanın değişip değişmediğini doğrulayın.
Teknoloji ve Yazılım topluluğuna gitBir video projesini başka diske kopyaladığınızda dosya adı ve boyutu doğru görünebilir. Yine de aktarımın aynı baytları koruduğunu daha güçlü biçimde kontrol etmek isteyebilirsiniz. SHA-256 özeti, dosyanın içeriğinden hesaplanan sabit uzunlukta bir değerdir. Bu rehberde kaynakla kopyanın özetini karşılaştıracağız. Önemli sınır şudur: eşleşen özet, dosyanın güvenli veya doğru kişiden geldiğini tek başına kanıtlamaz; karşılaştırdığınız referansa güvenmeniz gerekir.
1. Hangi sorunu çözüyoruz?
Örneğimiz iki gigabaytlık bir tanıtım videosunun harici diske teslimidir. Dosyayı tekrar izlemek görüntünün kullanılabilirliğini gösterir; özet karşılaştırması ise baytların aynı olup olmadığını kontrol etmeye yardımcı olur. İki dosya aynı görüntüyü farklı sıkıştırmayla içeriyorsa özetleri farklı olacaktır. Çünkü bu yöntem görsel benzerliği ölçmez. Dosyanın metadata alanındaki küçük bir değişiklik bile farklı sonuç doğurabilir.
2. Büyük dosyayı tek seferde okumayın
Videonun tamamını belleğe almak yerine birer megabaytlık parçalar okuyacağız. Böylece dosya boyutu büyüse de programın bu okuma işlemi için kullandığı bellek sınırlı kalır. Python’un standart hashlib modülü yeterlidir; ek paket gerekmez. Özet almak dosyayı değiştirmez. Yine de hesaplama sürerken dosyanın başka program tarafından yeniden yazılmadığından emin olun; tamamlanmamış dışa aktarımı kontrol etmeyin.
3. Kopyalanabilir kontrol betiği
Kodu sha_kontrol.py adıyla kaydedin. İlk komut yalnızca özet verir: python sha_kontrol.py video.mp4. İkinci komutta aynı dosyanın beklenen özetini ekleyerek karşılaştırma yapabilirsiniz. Beklenen değeri tırnak işaretleri olmadan 64 onaltılık karakter olarak verin.
from pathlib import Path
import hashlib
import re
import sys
if len(sys.argv) not in (2, 3):
raise SystemExit('Kullanım: python sha_kontrol.py dosya [beklenen_sha256]')
path = Path(sys.argv[1])
if not path.is_file():
raise SystemExit('Okunabilir bir dosya yolu belirtin.')
before = path.stat()
digest = hashlib.sha256()
with path.open('rb') as file:
for chunk in iter(lambda: file.read(1024*1024), b''):
digest.update(chunk)
after = path.stat()
if (before.st_size, before.st_mtime_ns) != (after.st_size, after.st_mtime_ns):
raise SystemExit('Dosya işlem sırasında değişti; tekrar kontrol edin.')
actual = digest.hexdigest()
print(actual, path.name)
if len(sys.argv) == 3:
expected = sys.argv[2].lower()
if not re.fullmatch(r'[0-9a-f]{64}', expected):
raise SystemExit('Beklenen SHA-256 değeri 64 onaltılık karakter olmalı.')
if actual == expected:
print('EŞLEŞİYOR: Bu referansla aynı bayt özeti.')
else:
print('EŞLEŞMİYOR: Dosyaları ve referansı inceleyin.')
raise SystemExit(1)4. Kaynak ve kopyayı karşılaştırın
Önce kaynak videonun özetini hesaplayıp tarihli teslim notuna kaydedin. Sonra kopyanın özetini aynı komutla alın. İki değer eşleşiyorsa bu kontrol bakımından aktarım aynı içerikle tamamlanmıştır. Değerleri elle karşılaştırırken baştan ve sondan birkaç karaktere bakmakla yetinmeyin; tüm değeri karşılaştırın veya betiğin ikinci kullanımını tercih edin. Dosya adının aynı olması yeterli değildir. Farklı adla kaydedilmiş iki birebir kopya aynı özeti verebilir.
5. Eşleşmiyorsa nasıl ilerlemeli?
Önce yanlış sürümü karşılaştırmadığınızı kontrol edin. “Video-v2” yerine “Video-v3” teslim edilmiş olabilir. Dosyalar farklısa hemen bozulma sonucuna varmayın; biri yeniden kodlanmış, kapak bilgisi eklenmiş veya metadata değiştirilmiş olabilir. Beklenen dosya buysa yeni referansı bilinçli biçimde oluşturun. Aynı olması gereken aktarımda uyuşmazlık sürüyorsa kaynağı koruyup yeniden kopyalayın ve sonucu tekrar kontrol edin. Kaynak dosyayı silmek ilk çözüm olmamalıdır.
6. Bütünlük ile güvenilirliği ayırın
Bir saldırgan hem dosyayı hem de yanındaki özet metnini değiştirebiliyorsa ikisinin birbirine uyması dosyanın güvenilirliğini göstermez. İnternetten indirilen yazılımda özeti resmî ve güvenilir bir kanaldan doğrulamak gerekir. Bu rehberdeki yöntem, kendi oluşturduğunuz dosyanın kopyasını karşılaştırmak için basit bir örnektir. Dijital imza, yayıncı kimliği ve kötü amaçlı içerik analizi farklı konulardır. SHA-256 sonucunu “virüssüzlük belgesi” diye sunmayın.
7. Teslim kaydını anlamlı hale getirin
Notunuza dosya adı, boyutu, üretim tarihi, sürüm ve SHA-256 değerini ekleyin. Videonun açılmasını, süresini, sesini ve son karesini ayrıca kontrol edin; dosya bit düzeyinde aynı olsa da yanlış projeyi dışa aktarmış olabilirsiniz. Alıcıya aynı referansı ilettiğinizde kendi kopyasını karşılaştırabilir. Büyük projelerde bütün dosyalar için manifest oluşturmak sonraki adımdır. Önce bu tek dosya akışını doğru öğrenmek, daha karmaşık arşiv kontrolüne sağlam bir temel sağlar.


