Вычисление хэшей MD5 для больших файлов в Python
Модуль hashlib Python предоставляет удобный интерфейс для вычисления криптографических хэшей. Однако для исключительно больших файлов, размер которых превышает системную память, использование hashlib напрямую может быть проблематичным.
Решение: прогрессивное хеширование
Чтобы решить эту проблему, мы используем прогрессивное хеширование. читая файл управляемыми кусками. Такой подход гарантирует, что все содержимое файла хешируется без чрезмерного потребления памяти. Вот пример функции Python, реализующей этот метод:
import hashlib
def md5_for_file(f):
block_size = 2**20
md5 = hashlib.md5()
while True:
data = f.read(block_size)
if not data:
break
md5.update(data)
return md5.digest()
Чтобы вычислить хэш MD5 большого файла, вы можете вызвать функцию следующим образом:
with open("filename", "rb") as f:
md5 = md5_for_file(f)
Примечание о файловом режиме
Для получения точных результатов убедитесь, что вы открываете файл в двоичном режиме с помощью «rb». Использование «r» может привести к неверным расчетам.
Дополнительные замечания
Для удобства ниже представлена улучшенная версия функции:
import hashlib
import os
def generate_file_md5(rootdir, filename):
m = hashlib.md5()
with open(os.path.join(rootdir, filename), "rb") as f:
buf = f.read()
while buf:
m.update(buf)
buf = f.read()
return m.hexdigest()
Для проверки точности рекомендуется перекрестная проверка рассчитанных хешей с помощью внешних инструментов, таких как jacksum.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3