Как я могу создать несколько хешей файла с помощью только одной передачи?

Если вы хотите все возможные комбинации, вы можете использовать itertools.product.

Первым шагом является перестановка всех возможных значений 'a', 'b', 'c' and 'd'. Предполагая, что ваш список повторяется каждые 4 шага, вы можете поместить в словарь, для ясности, как:

l1 = {k: [e.get(k) for e in your_list][i::4] for i, k in enumerate(['a', 'b', 'c', 'd'])}
l1
>> 
{'a': [32, 544, 42, 2145],
 'b': [2541, 44, 655, 450],
 'c': [530, 54, 459, 342],
 'd': [55, 454, 665, 186]}

Затем:

from itertools import product
combinations = [c for c in product(*l1.values())]
combinations
>>[(32, 2541, 530, 55),
 (32, 2541, 530, 454),
 (32, 2541, 530, 665),
 (32, 2541, 530, 186)
....
 (2145, 450, 342, 186)]   #256 combinations in this case (4**4)
6
задан Georg Schölly 11 February 2009 в 16:47
поделиться

3 ответа

Вот измененный @ʞɔıuиспользование ответа @Jason S'предложение.

from __future__ import with_statement
from hashlib import md5, sha1

filename = 'hash_one-pass.py'

hashes = md5(), sha1()
chunksize = max(4096, max(h.block_size for h in hashes))
with open(filename, 'rb') as f:
    while True:
        chunk = f.read(chunksize)
        if not chunk:
            break
        for h in hashes:
            h.update(chunk)

for h in hashes:
    print h.name, h.hexdigest()
8
ответ дан 8 December 2019 в 04:10
поделиться

Что-то вроде этого, возможно?

>>> import hashlib
>>> hashes = (hashlib.md5(), hashlib.sha1())
>>> f = open('some_file', 'r')
>>> for line in f:
...     for hash in hashes:
...         hash.update(line)
... 
>>> for hash in hashes:
...     print hash.name, hash.hexdigest()

или цикл по f.read (1024) или что-то как этот для получения блоков фиксированной длины

15
ответ дан 8 December 2019 в 04:10
поделиться

Я не знаю Python, но я - знакомые вычисления хеша w/.

При обработке чтения файлов вручную просто читайте в одном блоке (256 байтов или 4 096 байтов или безотносительно) за один раз, и передайте каждый блок данных для обновления хеша каждого алгоритма. (необходимо будет инициализировать состояние вначале и завершить состояние в конце.)

3
ответ дан 8 December 2019 в 04:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: