2010-05-25 2 views
1

Я занимаюсь программированием на Python (все еще n00b на нем) и наткнулся на что-то странное. Я сделал небольшую программу, чтобы найти хэш MD5 имени файла, переданного ему в командной строке. Я использовал функцию, которую я нашел here на SO. Когда я запускал его против файла, я получил хеш «58a ... 113». Но когда я запустил Microsoft FCIV или md5sum.py в \ Python26 \ Tools \ Scripts \, я получаю другой хэш, «591 ... ae6». Фактическая хеширования часть md5sum.py в скриптахРазличия хэша MD5 между Python и другими файловыми файлами

m = md5.new() 
while 1: 
    data = fp.read(bufsize) 
    if not data: 
     break 
    m.update(data) 
out.write('%s %s\n' % (m.hexdigest(), filename)) 

Это выглядит функционально идентичен коду в функции, заданной в другой ответ ... Что мне не хватает? (Это мой первый раз, разместив на StackOverflow, пожалуйста, дайте мне знать, если я делаю это неправильно.)

+2

Где находится 'fp'? Вы открываете его в режиме ASCII вместо двоичного? – FogleBird

+0

Ах, ха! Вот и все. Я не указывал параметр mode в функции open() в моей программе, поэтому он не выполнял текстовый режим. Я установил режим в «rb», и теперь он возвращает правильный хеш. Благодаря! – Sam

ответ

8

Уже решен в комментариях, но в случае, если кто-то хочет дать мне очки ...;)

Open ваш файл в двоичном режиме!

f = open(path, 'rb') 
Смежные вопросы