Foi fácil escrever uma pequena hasher de 1 MB usando rhash
tools ( librhash
library). Existe um script perl simples que cria somas de verificação de cada parte de 1MB do fluxo de entrada padrão. Ele precisa de Crypt::Rhash
de ligações de cpan
:
$ cpan
(cpan) install Crypt::Rhash
$ cat rhash1M.pl
#!/usr/bin/perl
# Compute md5 and sha1 sum of every 1 MB part of stream
use strict;
use local::lib;
use Crypt::Rhash;
my ($buf, $len, $i);
my $r=Crypt::Rhash->new(RHASH_MD5|RHASH_SHA1);
# we can add more hashes, like RHASH_TIGER etc
binmode STDIN;
$i=0;
while($len= read STDIN,$buf,1024*1024){
print "$i+$len: \t"; # print offset
$r->update($buf);
print "md5:",$r->hash(RHASH_MD5), " sha1:", $r->hash(RHASH_SHA1),"\n";
$r->reset(); # reset hash calculator
$i+=$len;
}
Esse script de domínio público gerará o deslocamento decimal, em seguida, +
, depois o tamanho do bloco e, em seguida, as somas md5 e sha1 da entrada.
Por exemplo, 2 MB de zeros tem somas:
$ dd if=/dev/zero of=zerofile bs=1M count=2
$ ./rhash1M.pl < zerofile
0+1048576: md5:b6d81b360a5672d80c27430f39153e2c sha1:3b71f43ff30f4b15b5cd85dd9e95ebc7e84eb5a3
1048576+1048576: md5:b6d81b360a5672d80c27430f39153e2c sha1:3b71f43ff30f4b15b5cd85dd9e95ebc7e84eb5a3