Берете hashlib, создаете объект хэша нужного типа, обновляете его содержимым одного файла, потом другого файла, и т.д., в конце получаете общий хэш.
import hashlib
hash = hashlib.sha256()
files = sorted(["file1.txt", "file2.txt"])
for file_name in files:
with open(file_name, "rb") as file:
hash.update(file.read())
print(hash.hexdigest())
Экономный по памяти вариант:
import io
import hashlib
hash = hashlib.sha256()
files = sorted(["file1.txt", "file2.txt"])
for file_name in files:
with open(file_name, "rb") as file:
while block := file.read(io.DEFAULT_BUFFER_SIZE):
hash.update(block)
print(hash.hexdigest())
В идеале в хэш еще нужно добавлять имена файлов, потому что теоретически может случиться ситуация, что файл A не пустой, а файл B пустой, в какой-то момент они меняются содержимым (A становится пустым, а B получает старое содержимое A), а хэш при этом не меняется.
Но вообще лучше конечно хранить список файлов с их хешами, не слепляя все в один хэш.