Разделите файлы на блоки, скажем, по 100 КБ каждый. Затем вычислите хэш SHA (или какой-либо другой алгоритм хеширования) для каждого из блоков. поэтому, если размер файла составляет 905 КБ, у вас будет 10 таких вычисленных хешей.
Сервер будет содержать файл определения хеша для каждого файла, который он обслуживает. Этот файл определения хеша будет содержать список всех блоков файла вместе с хешем. Поэтому, если сервер обслуживает наш файл размером 905 КБ, который называется test.exe. Тогда у нас будет другой файл с именем test.exe.hashes, который содержит список из 10 хешей файла.
Клиент загружает файл определения хэша и гарантирует, что в нем есть все блоки. Клиент может запросить каждый блок по отдельности, и после его загрузки он может снова вычислить хеш на своем конце, чтобы убедиться в отсутствии повреждения.
Вам не нужно физически разделять файл, разделение файла - это просто чтение интересующей его части. Первый блок файла находится в диапазоне байтов от 0 до 102399, следующий блок - от 102400. до 204800 и так далее. Так что просто откройте файл, найдите эту позицию, прочитайте данные и закройте файл.