Сбой Python при вычислении хэшей SHA-1 для больших файлов в ОС Windows

Мне интересно, могу ли я по-новому взглянуть на этот скрипт Python. Он отлично работает с файлами малого и среднего размера, но с большими (4-8 ГБ или около того) он по необъяснимым причинам вылетает после нескольких минут работы.

Заархивированный скрипт здесь

Или:

import sys
import msvcrt
import hashlib

#Print the file name (and its location) to be hashed  
print 'File:  ' + str(sys.argv[1])

#Set "SHA1Hash" equal to SHA-1 hash
SHA1Hash = hashlib.sha1()

#Open file specified by "sys.argv[1]" in read only (r) and binary (b) mode
File = open(sys.argv[1], 'rb')

#Get the SHA-1 hash for the contents of the specified file
SHA1Hash.update(File.read())

#Close the file
File.close()

#Set "SHA1HashBase16" equal to the hexadecimal of "SHA1Hash"
SHA1HashBase16 = SHA1Hash.hexdigest()

#Print the SHA-1 (hexadecimal) hash of the file
print 'SHA-1: ' + SHA1HashBase16

#Make a blank line
print ' '

#Print "Press any key to continue..."
print 'Press any key to continue...'

#"Press any key to continue..." delay
char=0
while not char:
    char=msvcrt.getch()

* Обновлено *

Рабочий скрипт python для вычисления хэша SHA-1 больших файлов. Спасибо Игнасио Васкес-Абрамсу за указание на то, что было не так, и Тому Зиху за код.

Заархивированный исходный код здесь

Для использования просто перетащите файл, который нужно хешировать, поверх скрипта. В качестве альтернативы вы можете использовать командную строку с использованием:

SHA-1HashGen.py Path&File 

Were SHA-1HashGen.py - это имя файла сценария, а Path & File - это путь и имя файла для хеширования.

Или отбросьте скрипт в папку SendTo (в ОС Windows; оболочка: sendto), чтобы получить его как вариант, щелкнув правой кнопкой мыши.

6
задан Peter 2 April 2011 в 19:01
поделиться