Crittografia HASH

Stato
Discussione chiusa ad ulteriori risposte.

Oromis92

Utente Silver
22 Dicembre 2007
102
12
2
84
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 :)

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
diventa
Codice:
0bf23cd5
 
Stato
Discussione chiusa ad ulteriori risposte.