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

  • 1881 Animation

    1881 Animati

    5 EKİM 2013
  • ICON

    ICON

    19 EKİM 2011
  • Photoshop Pro Help

    Photoshop Pr

    1 Ocak 2007