Можно сделать то, что вы хотите -- посчитать хеш только по некоторым блокам. Но тогда хеш не будет уникальным. Допустим у вас есть файл:XXXXXAAAAAAAAAAAAAAAAAXXXXXXAAAAAAAAAAAAAAAAXXXXXX
Буквами X обозначены те блоки, которые включены в хеш. Тогда те блоки, которые обозначены буквой A можно произвольно менять, и хеш не изменится.
Так что этот метод не подходит не только для криптогафических применений, но и для отслеживания изменений файлов. Для глобальной идентификации файлов по всему миру он тоже не подходит. Тут лучше посмотрите в строну хешей в сети edonkey. Большой плюс -- они уже посчитаны для миллионов файлов и подходят не только для "идентификации"... =)
А вот если вы просто хотите создать некоторую маленькую строку, которой потом будете идентифицировать файл локально -- например, при добавлении файла в фильмотеку для него создаётся такой хеш, который служет идентификатором каким-то -- ваша схема вполне подходит. Только тут лучше не изобретать велосипед, и использовать UUID, потому что для работы с ним уже много готовых библиотек есть. Да и сам UUID более стандартная вещь, чем такой самопальный хеш.
Если вы таки хотите хеш по всему файлу, то учитывайте, что время его подсчёта будет как минимум равно времени чтения файла. Поэтому замерьте cat file > /dev/null для начала. Это и будет минимально достижимое время *в принципе*.