Вычисление быстрых, не криптографически безопасных хэшей файлов в Python - PullRequest
0 голосов
/ 26 декабря 2018

Существует хорошее обсуждение переполнения стека вычислительных хэшей файлов , включая файлы, слишком большие для размещения в памяти, в Python ( 1 , 2 , 3 ).В итоге они получают решения, которые выглядят примерно так (слегка отредактировано от # 3):

def md5_file(path, size):
    m = hashlib.md5()
    with open(path, 'rb') as f:
        b = f.read(size)
        while len(b) > 0:
            m.update(b)
            b = f.read(size)
    return m.digest()

Если вам не нужна криптографически безопасная хэш-функция (чего я не делаю), тогда есть pyfasthash (по-видимому, также известный как pyhash), как обсуждено здесь .К сожалению, в хеш-классах pyfasthash отсутствует метод update, использованный выше.У меня не было большой удачи, чтобы понять, что еще делать;смесь кода Python-C вне меня.Я просто читаю весь файл в память следующим образом:

with open(path, 'rb') as afile:
    return hasher(afile.read())

Недостатки этого подхода:

  1. Файл должен уместиться в памяти
  2. Это медленнее.В соответствии с # 3 вы хотите, чтобы объем загружаемого вами в память файла был достаточно мал, чтобы избежать подкачки страниц (около 64 КБ на компьютере автора плаката).

Isесть ли способ быстрее вычислить хэши моих файлов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...