1

私はpythonを使用して、md5チェックサムを自動的に検証するダウンロードマネージャーを作成しています...問題は、pythonが間違ったmd5を提供することです。サードパーティのmd5検証ソフトウェアとクロスチェックしました。

私はhashlibを使用してmd5をチェックしています..これがmd5チェックサムの私のコードです一部のファイルではmd5が正しく取得されますが、他のファイルでは完全に間違っています...

x= sys.path[0]
x= x + '\\' + file_name
print 'file successfully saved to path', x
file_ref=open(x,'rb').read()
hashlib.md5(file_ref).hexdigest()
print 'MD5 of file is:',hashlib.md5(file_ref).hexdigest()

ウェブサイト上の元のファイルの md5: e557fa76ed485fd10e8476377ad5be95

Python によって与えられた md5: cb3b2227733d3344dba15e5e39d04f43

md5 ベリファイアによって指定された md5: e557fa76ed485fd10e8476377ad5be95

助けてください :/

4

1 に答える 1

2

一部のファイルについては正しいことを読んでいますが、他のファイルについては間違っています。パスを確認できます。これは私がmd5に使用するものです:

def hashsum(path, hex=True, hash_type=hashlib.md5):
    hashinst = hash_type()
    with open(path, 'rb') as f:
        for chunk in iter(lambda: f.read(hashinst.block_size * 128), b''):
            hashinst.update(chunk)
    return hashinst.hexdigest() if hex else hashinst.digest()

これを使用して比較できます。

myhash = hashsum(cfile)
sproc = subprocess.Popen(['md5', cfile], stdout=subprocess.PIPE)
syshash = sproc.communicate()[0].split()[0]
print myhash
print syshash
print 'Hash idetntical' if myhash == syshash else 'Hash check fail'

どこcfileにファイルへのパスです。私はあなたの道が間違っていると思います。私はWindowsを推測しているのでsys.path[0]、現在のディレクトリを取得する適切な方法ではありません.

于 2013-02-22T08:49:35.010 に答える