2016-12-15 4 views
0

Доброе утро, Итак, я создал хэш MD5 из TXT-файла. После изменения содержимого файла, вставляющего новые значения, я попытался снова создать хеш MD5, но значение не изменилось. Что я мог сделать?Новый хэш MD5 после изменения файла TXT в Python

Мой код:

from hashlib import md5 

open_file = open('N0003966.290', 'r', encoding='ISO-8859-1') 
file = open_file.read().lower().rstrip('\n\r ').strip('\n\r') 

m = md5() 
m.update(b'file') 
print(m.hexdigest()) 

мне нужно следовать некоторым требованиям, чтобы построить этот хэш, такие как:

  • Правило кодирования должен быть 'ISO-8859-1'
  • All символы должны быть строчные буквы
  • Новые символы строки и символы возврата каретки НЕ должны рассматриваться в здании хэша
+0

Действительно ли это с использованием файлового объекта или файла строки? – doctorlove

ответ

1

Вы звоните update в строку 'file', а не содержимое файла. Сделайте это вместо того, чтобы:

from hashlib import md5 

open_file = open('N0003966.290', 'r', encoding='ISO-8859-1') 
file_content = open_file.read().lower().rstrip('\n\r ').strip('\n\r') 

m = md5() 
m.update(file_content.encode('ISO-8859-1')) 
print(m.hexdigest()) 

Также обратите внимание, я заменить переменную file на file_content (это плохая практика, чтобы переопределить встроенный имя).

+0

Я тоже пробовал этот код, но когда я не ставил «b» после имени переменной, я получил ошибку: ТипError: объекты Unicode должны быть закодированы перед хешированием –

+0

Ах да, вам нужно правильно закодировать свой строка. Попробуйте с моим редактированием. – DevShark

+0

Это правильно генерирует новый хеш после изменения txt-файла. Ожидание хэша не было создано, но я продолжаю пытаться. Спасибо @DevShark –

1
m.update(b'file') 

Эта проблема является проблемой. Вы вызываете функцию в строке «файл», представленной в виде байтов (см., Например, this question), а не на данные в файле.

Если вы замените его

m.update(file) 

вы должны получить результаты, которые вы хотите (хотя, как DevShark указывает, вы должны также изменить имя этой переменной к чему-то, что еще не имеет своих собственных имея в виду).

0

Этот код также работает в python 2.7.

from hashlib import md5 

open_file = open('a.txt', 'r') 
file = open_file.read().lower().rstrip('\n\r ').strip('\n\r') 

m = md5() 
m.update(file) 
print(m.hexdigest()) 

m.update(b'file') это место, где вы получили ошибку заменить его m.update(file).