• Non ci sono risultati.

abbiamo bisogno di almeno 3 caratteri di testo cifrato if( input.length() &lt

N/A
N/A
Protected

Academic year: 2021

Condividi "abbiamo bisogno di almeno 3 caratteri di testo cifrato if( input.length() &lt"

Copied!
2
0
0

Testo completo

(1)

Vengono presentati due metodi scritti in Java che agevolano il crittoanalista nella individuazione dei trigrammi che si ripetono nel testo cifrato. Il metodo kasiskiAttack restutuirà la lista dei trigrammi ripetuti più di una volta con le loro rispettive distanze; sarà compito del crittoanalista poi dedurre la lunghezza della parola chiave dopo aver analizzato la scomposizione in fattori primi delle distanze. Il metodo splitCyphertext divide semplicemente il testo per colonne, una volta conosciuta la parola chiave così da permettere una semplice analisi statistica sugli n cifrari monoalfabetici (con n=lunghezza parola chiave). Questi metodi erano inseriti nel codice di una applet java*/

//metodo per il calcolo della lunghezza della parola chiave basandosi sulle distanze dei trigrammi ripetuti nel testo

public void kasiskiAttack(String input) { Vector trigramList = new Vector();

String trigram;

// abbiamo bisogno di almeno 3 caratteri di testo cifrato if( input.length() < 3 )

return;

// analizza tutti i trigrammi del testo cifrato for( int i = 0; i < input.length()-2; ++i ) { trigram = input.substring( i, i+3 );

//se un trigramma si ripete più di una volta inseriscilo in una lista if( input.indexOf(trigram,i+1) != -1 ) {

if( trigramList.indexOf(trigram) == -1 ) trigramList.addElement(trigram);

} }

//analizza la lista dei trigrammi ripetuti e calcolane le occorrenze e le distanze for( int i = 0; i < trigramList.size(); ++i ) {

trigram = (String)trigramList.elementAt(i);

int count = 0;

// costruisci un’array delle posizioni dei trigrammi

int[] posArray = new int[countOccurrences(input,trigram)];

int index = input.indexOf(trigram);

while( index != -1 ) {

posArray[count++] = index;

index = input.indexOf(trigram, index+1);

}

// stampa il numero delle volte che si presenta un trigramma ed a che punto output.append( trigram + ": occurs " + count + " times, at pos " );

for( int j = 0; j < count; ++j )

output.append( (j==0?"":", ") + posArray[j] );

output.append( "\n distance(s): " );

// ora stampa la distanza fra i trigrammi uguali del testo for( int j = 0; j < count; ++j ) {

for( int k = j+1; k < count; ++k )

output.append( (j==0&&k==1?"":", ") +

(posArray[k]- posArray[j]) );

}

output.append( "\n" );

}

output.append( "\n" );

}

(2)

// divide il testo cifrato in pezzi sulla base della lunghezza della chiave public void splitCyphertext(String input, int keyLen) {

if( keyLen <= 0 )

return;

// crea un array di n stringhe vuote con n = lunghezza della chiave String[] strs = new String[keyLen];

for( int i = 0; i < keyLen; ++i ) strs[i] = "";

// analizza tutte le lettere del testo e suddividile in parti for( int i = 0; i < input.length(); ++i )

strs[i%keyLen] += input.charAt(i);

// stampale

for( int i = 0; i < keyLen; ++i )

output.append( "KeyPos=" + i + ": " + strs[i] + "\n" );

output.append( "\n" );

}

Riferimenti

Documenti correlati

Per ogni retta unita, si determini il birapporto della quaterna formata da due punti e dalle loro

Vanno consegnati in un unico file pdf: al pi` u 4 facciate A4 con lo svolgi- mento autografo (leggibile e ben giustificato) del compito.. Riportare i seguenti dati anche sui

Vanno consegnati in un unico file pdf: al pi` u 4 facciate A4 con lo svolgi- mento autografo (leggibile e ben giustificato) del compito. Riportare i seguenti dati anche sui fogli con

- capacità di usare la lingua in maniera sufficientemente articolata in relazione agli scopi e alle situazioni comunicative. - Saper realizzare forme di scrittura diverse in

Nota Bene: nella procedura devono comparire almeno una volta tutte le variabili dichiarate (A, B, C, D, E, H, K, M).. Scrivere la soluzione nella

Tra i metodi della nuova classe, oltre a quelli che restituisco- no i valori delle variabili istanza, definire un metodo etichetta che restituisce le in- formazioni relative ad

- un metodo che restituisce una stringa che descrive un volo non diretto tramite sigla del volo, citt`a e nome dell’aereoporto di partenza, citt`a e nome dell’aereoporto di

Scrivere un metodo che, data una matrice di interi, restituisce true se gli ele- menti sul bordo esterno della matrice sono tutti uguali, false altrimenti.. Scrivere un metodo