ecco un piccolo hash adattato dal Toy Tetragraph Hash (ne trovate una descrizione qui >> www.ee.nthu.edu.tw/whhsu/ComSecu96/Problems/Chapter%2012.pdf), che genera un hash di soli 4 byte. ovviamente non è molto sicuro.
il mio adattamento consiste nell'usare tutto il chrset ascii anzichè le sole 26 lettere dell'alfabeto. tutto qui
l'usage è
praticamente mi divido l'intero testo in blocchi di sedici caratteri (se sono di meno gli riempo con degli 0)
dopodichè me li sistemo in una griglia 4x4 e leggo le colonne, da sinistra a destra, sommando tutti i numeri modulo 256 e salvandoli in quattro numeri (a b c d)
dopo eseguo questa operazione:
sposto la èrima riga di una posizone a sinistra, la seconda riga di due posizioni, la terza di tre, e inverto l'ordine dell'ultima.
quidni risommo (sempre modulo 256) i numeri di prima con questi, sempre leggendo colonna per colonna.
ii 4 numeri risultanti sono i numeri di partenza per il prssimo blocco, e così via fino alla fine.
esempio:
diventa
il mio adattamento consiste nell'usare tutto il chrset ascii anzichè le sole 26 lettere dell'alfabeto. tutto qui
Codice:
#!/usr/bin/perl
$plain .= $_ while <>;
while ( ( length($plain) ) % 16 != 0 ) {
$plain .= chr(0);
}
$count = ( length($plain) ) / 16;
$a = 0;
$b = 0;
$c = 0;
$d = 0;
for ( $i = 0, $j = 0 ; $i < $count, $j < $count ; $i += 16, $j++ ) {
$plain[$j] = substr( $plain, $i, 16 );
}
$k = 0;
while ($count) {
$plain2 = $plain[$k];
$k++;
@plain3 = split //, $plain2;
@plain3 = map( ord, @plain3 );
$a =
( $plain3[0] +
$plain3[1] +
$plain3[4] +
$plain3[6] +
$plain3[8] +
$plain3[11] +
$plain3[12] +
$plain3[15] ) % 256;
$b =
( $plain3[1] +
$plain3[2] +
$plain3[5] +
$plain3[7] +
$plain3[8] +
$plain3[9] +
$plain3[13] +
$plain3[14] ) % 256;
$c =
( $plain3[2] +
$plain3[3] +
$plain3[4] +
$plain3[6] +
$plain3[9] +
$plain3[10] +
$plain3[13] +
$plain3[14] ) % 256;
$d =
( $plain3[0] +
$plain3[3] +
$plain3[5] +
$plain3[7] +
$plain3[10] +
$plain3[11] +
$plain3[12] +
$plain3[15] ) % 256;
$a += $a % 256;
$b += $b % 256;
$c += $c % 256;
$d += $d % 256;
$count--;
}
$a /= 2;
$b /= 2;
$c /= 2;
$d /= 2;
$out = chr($a) . chr($b) . chr($c) . chr($d);
print "$out";
l'usage è
Codice:
perl nomescript.pl [FILE INPUT] >> [FILE OUTPUT]
praticamente mi divido l'intero testo in blocchi di sedici caratteri (se sono di meno gli riempo con degli 0)
dopodichè me li sistemo in una griglia 4x4 e leggo le colonne, da sinistra a destra, sommando tutti i numeri modulo 256 e salvandoli in quattro numeri (a b c d)
dopo eseguo questa operazione:
sposto la èrima riga di una posizone a sinistra, la seconda riga di due posizioni, la terza di tre, e inverto l'ordine dell'ultima.
quidni risommo (sempre modulo 256) i numeri di prima con questi, sempre leggendo colonna per colonna.
ii 4 numeri risultanti sono i numeri di partenza per il prssimo blocco, e così via fino alla fine.
esempio:
Codice:
the quick brown fox jumps over the lazy dog
Codice:
0bf23cd5