Python MD5 не совпадает с MD5 в терминале - PullRequest
4 голосов
/ 09 февраля 2010

Эй, ребята, я получаю MD5 из нескольких файлов с помощью функции python

filehash = hashlib.md5(file)
print "FILE HASH: " + filehash.hexdigest()

хотя, когда я иду в терминал и делаю

md5 file

результат, который я получаю, не тот, который выводит мой скрипт на python (они не совпадают). Есть ли шанс, что кто-то знает почему? Благодарю.

Ответы [ 4 ]

22 голосов
/ 09 февраля 2010

hashlib.md5 () принимает содержимое файла, а не его имя.

См. http://docs.python.org/library/hashlib.html

Вам необходимо открыть файл и прочитать его содержимое, прежде чем хэшировать.

f = open(filename,'rb')
m = hashlib.md5()
while True:
    ## Don't read the entire file at once...
    data = f.read(10240)
    if len(data) == 0:
        break
    m.update(data)
print m.hexdigest()
6 голосов
/ 09 февраля 2010
$ md5 test.py
MD5 (test.py) = 04523172fa400cb2d45652d818103ac3
$ python
Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import hashlib
>>> s = open('test.py','rb').read()
>>> hashlib.md5(s).hexdigest()
'04523172fa400cb2d45652d818103ac3'
3 голосов
/ 09 февраля 2010

Попробуйте это

filehash = hashlib.md5(open('filename','rb').read())
print "FILE HASH: " + filehash.hexdigest()
1 голос
/ 09 февраля 2010

что такое file? оно должно равняться open(filename, 'rb').read(). это?

...