SORU
7 AĞUSTOS 2010, CUMARTESİ


Üreten bir dosyanın MD5 sağlama toplamı?

Python dosyaların bir listesi (ve kontrol) MD5 sağlama üreten herhangi bir basit bir yolu var mı? (Üzerinde çalıştığım küçük bir program var, ve dosyaları sağlaması teyit etmek istiyorum).

CEVAP
7 AĞUSTOS 2010, CUMARTESİ


Güzel hatıralar, bir bir yolu varverimsiz.

tek dosya:

print hashlib.md5(open(full_path, 'rb').read()).hexdigest()

dosya listesi:

import hashlib
[(fname, hashlib.md5(open(fname, 'rb').read()).digest()) for fname in fnamelst]

Ancak, MD5 kırık bilinir ve (IMHO) burada aslında yapmanız gereken ne kadar korkutucu admin uyarıları ile gelip kütüphaneden kaldırıldı:

import hashlib
[(fname, hashlib.sha256(open(fname, 'rb').read()).digest()) for fname in fnamelst]

Eğer sadece Özet değerinde 128 bit istiyorsanız .digest()[:16] yapabilirsiniz.

Bu senin dizilerini, her başlığın kendi dosya adını içeren ve karma bir liste verecektir.

Yine şiddetle MD5 kullanmanız soru. En azından SHA1 kullanıyor olması gerekir. Bazı insanlar için MD5 kullanmadığınız sürece bu 'şifreli' amaçlar, iyisin. Ama böyle bir eğilim başlangıçta beklenenden daha kapsamı daha geniş olması ve rahat güvenlik açığı analizi tamamen kusurlu olabilir. En iyisi kapı dışarı doğru algoritmayı kullanarak alışkanlığı olsun. Harf farklı bir sürü yazım sadece, hepsi bu. O kadar da zor değil.

Burada daha karmaşık, ama bir şekildebellek verimli:

import hashlib
def hashfile(afile, hasher, blocksize=65536):
    buf = afile.read(blocksize)
    while len(buf) > 0:
        hasher.update(buf)
        buf = afile.read(blocksize)
    return hasher.digest()

[(fname, hashfile(open(fname, 'rb'), hashlib.md5())) for fname in fnamelst]

Ve yine MD5 beri kırık ve gerçekten hiç artık kullanılmamalıdır:

import hashlib
def hashfile(afile, hasher, blocksize=65536):
    buf = afile.read(blocksize)
    while len(buf) > 0:
        hasher.update(buf)
        buf = afile.read(blocksize)
    return hasher.digest()

[(fname, hashfile(open(fname, 'rb'), hashlib.sha256())) for fname in fnamelst]

Yine, eğer sadece 128 bitlik Özet değerinde istiyorsanız hashfile(...) çağrısının [:16] koyabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Awesomesauce Network

    Awesomesauce

    4 EKİM 2012
  • khloe brooks

    khloe brooks

    25 Temmuz 2011
  • MrChiCity3

    MrChiCity3

    14 NİSAN 2008