python 3.9 - не удалось получить правильный хэш sha1 для нескольких файлов в цикле
Ссылаясь на код, указанный в решении по ссылке ниже, вы не получаете правильный хэш SHA1 для 2-го и далее файлов в цикле . Почему неправильно говорить, потому что
Используя приведенный ниже код: -
ПРАВИЛЬНО -> При попытке сгенерировать хэш SHA1 для одного и того же файла отдельно (путем выполнения кода дважды), затем получить другой хэш SHA1 (правильно) и
НЕПРАВИЛЬНО -> При генерации хэша для нескольких файлов в одном выполнении, включая этот файл, также получается другой хэш (неверный) для этого файла ->
Пожалуйста, посоветуйте, если что-то изменить в этом коде или нужно выбрать какой-либо другой подход?
Код, написанный по ссылке, указанной внизу ->
import glob
import hashlib
import os
path = input("Please provide path to search for file pattern (search will be in this path sub-directories also: ")
filepattern = input("Please provide the file pattern to search in given path. Example *.jar, *abc*.jar.: ")
assert os.path.exists(path), "I did not find the path " + str(path)
path = path.rstrip("/")
tocheck = (f'{path}/**/{filepattern}')
hash_obj = hashlib.sha1()
searched_file_list = glob.iglob(tocheck, recursive=True)
for file in searched_file_list:
print(f'{file}')
try:
checksum = ""
file_for_sha1 = ""
file_for_sha1 = open(file, 'rb')
hash_obj.update(file_for_sha1.read())
checksum = hash_obj.hexdigest()
print(f'sha1 for file ({file})= {checksum}')
finally:
file_for_sha1.close()
Пример файла -> abc.txt с приведенным ниже текстом, созданным в /home/test/git/reader/cabin/: — Привет, это для проверки кода SHA1.
а затем этот файл скопирован еще в одно место, т.е. /home/test/git/reader/check/cabin/
Вывод консоли Linux, показывающий один и тот же SHA1 для обоих файлов: -
:~/git/reader/check/cabin$ sha1sum abc.txt
fc4db67f46711b2c18bd133abd67965649edfffc abc.txt
:~/git/reader/check/cabin$ cd ../..
:~/git/reader$ cd cabin/
:~/git/reader/cabin$ sha1sum abc.txt
fc4db67f46711b2c18bd133abd67965649edfffc abc.txt
Код в цикле в одном выполнении — создание двух разных SHA1 для этого файла abc.txt из обоих мест: —
- sha1 для файла (/home/test/git/reader/cabin/abc.txt)= fc4db67f46711b2c18bd133abd67965649edfffc
- sha1 для файла (/home/test/git/reader/check/cabin/abc.txt)= a4691598ea25ea4c7404369a685725115c7f305b
Код выполняется дважды для одного и того же файла, указывая соответствующее местоположение (означает один файл за раз), а затем генерируя одинаковый и правильный хэш SHA1:
sha1 для файла (/home/test/git/reader/check/cabin/abc.txt)= fc4db67f46711b2c18bd133abd67965649edfffc
sha1 для файла (/home/test/git/reader/cabin/abc.txt)= fc4db67f46711b2c18bd133abd67965649edfffc
Ссылка на исходный код ->Генерация одной контрольной суммы MD5/SHA1 для нескольких файлов в Python