>Во вторых какая вероятность что взятые 25 частей файла по n
>байт будут похожи и при этом размер у них будет одинаковый? Вероятность близка к нулю, но всё же не ноль. В принципе, для ваших целей этот метод может и подходит, но криптографической строгости тут нет.
>Для ускорения обсчета этого хеша Я хочу написать утилку наподобии cat, которая
>будет читать несколько частей файла и выводить их непрерывным потоком а
>в конце или в начале в вывод добавлять размер файла.
Вполне. Можете обсчитать первый и последний мегабайт. Приблизительно так:
#!/usr/bin/perl
use warnings;
use strict;
use Fcntl qw(SEEK_END);
use Digest::MD5;
our $file = $ARGV[0];
if(! -f $file)
{
die("not a regular file");
}
my $size = (stat($file))[7];
my $ctx = Digest::MD5->new();
my $buf = '';
open(FILE, '<', $file) or die("can't open file");
read(FILE, $buf, 1024*1024);
$ctx->add($buf);
if($size >= 1024*1024*2)
{
seek(FILE, 1024*1024, SEEK_END);
read(FILE, $buf, 1024*1024);
$ctx->add($buf);
}
close(FILE);
print($ctx->hexdigest, "\n");