Python Md5 Hashing, завершающий перевод строки при чтении файла - PullRequest
0 голосов
/ 28 ноября 2018

Я испытываю неожиданное поведение при чтении файла и хэшировании (в Python 3.7).

У меня есть файл, в котором просто есть текст "helloworld", без перевода строки в конце:

>>hexdump -C input.txt
00000000  68 65 6c 6c 6f 77 6f 72  6c 64 0a                 |helloworld.|
0000000b

Я запускаю следующий скрипт Python:

def hashit(inp):
    return hashlib.md5(inp.encode('utf-8')).hexdigest()

from_var = 'helloworld'

with open('input.txt', 'r') as fo:
    from_file = fo.read()

print(f' from_file      : { repr(from_file) }')
print(f' from_var       : { repr(from_var) }')

print(f' from_file hash : { hashit(from_file) }')
print(f' from_var  hash : { hashit(from_var) }')

Я получаю следующий вывод:

from_file      : 'helloworld\n'
from_var       : 'helloworld'
from_file hash : d73b04b0e696b0945283defa3eee4538
from_var  hash : fc5e038d38a57032085441e7fe7010b0

Первое, что я замечаю, это перевод строки в конце, когдаЯ прочитал файл.Откуда это взялось?

Учитывая завершающий символ новой строки, неудивительно, что хеш-коды для этих двух строк различны.

Чтобы проверить, я запустил утилиту md5sum непосредственно для файла:

>>md5sum input.txt 
d73b04b0e696b0945283defa3eee4538  input.txt

Этого я совсем не понимаю.Сумма md5 из оболочки совпадает с суммой md5 строки с завершающей новой строкой - даже если в файле нет новой строки.

Итак, мои вопросы:

  1. Почемули .read () добавлять новую строку в конец файла?
  2. Почему md5sum из командной строки соответствует строке ** с ** завершающей новой строкой, даже если в файле нет новой строки?
...