Cifratura simmetrica



Documenti analoghi
Flussi, lettori e scrittori

C. Horstmann Fondamenti di programmazione e Java 2 3^ edizione Apogeo

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Esercitazione 6. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008

ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete

Corso di Reti di Calcolatori L-A

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Corso di Reti di Calcolatori. java.net.url

Corso sul linguaggio Java

Input/Output in Java

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

Input e Output in Java

Architettura Client-Server

Chat. Si ha un server in ascolto sulla porta Quando un client richiede la connessione, il server risponde con: Connessione accettata.

Prova d Esame Compito A

Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel , dario.bottazzi@unibo.it, SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell

Prova d Esame Compito B

20 - Input/Output su File

Esercitazioni Ingegneria del So2ware 3 - Programmazione Java Excep<ons, I/O

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

Corso sul linguaggio Java

Unità B3 Strutture di controllo

Operazioni di scrittura e lettura con periferici in linguaggio Java

Algoritmi di Ricerca. Esempi di programmi Java

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

SAPIENZA Università di Roma, Facoltà di Ingegneria

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

Il linguaggio Java I file sequenziali

Parcheggio.rtf 1/8 6 gennaio Prova di programmazione: parcheggio a pagamento

La gestione di file e flussi in Java: note introduttive

File, flussi e pacchetto java.io

Gestione delle Eccezioni

MagiCum S.r.l. Progetto Inno-School

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

Lezione 5: Socket SSL/ TLS. Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Esercitazioni 7 e 8. Bounded Buffer con sincronizzazione Java (1)

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a luglio 2013

Un esercizio d esame. Flavio De Paoli

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; }

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Luglio Soluzione degli Esercizi

Lezione 11 Accesso al file system

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Esempi di esercizi d esame

Corso di Reti di Calcolatori

Corso di Reti di Calcolatori. Datagrammi

Programmare con le Socket TCP in java. 2: Application Layer 1

Applicazioni web. Parte 5 Socket

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL

FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

Esercizi della lezione 5 di Java

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

ARRAY BIDIMENSIONALI float [][] mx = new float[3][4]; (float []) [] mx = new float[3][4];

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Programmazione Java (Applicazioni e Applet )

Esercitazioni aggiuntive Martedì Laboratorio L-12

Sincronizzazione con Java

Corsi di Reti di Calcolatori (Docente Luca Becchetti)

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a giugno 2013

Programmazione in Java (I modulo) Lezione 3: Prime nozioni

Parte II: Reti di calcolatori Lezione 10

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Applicazioni TCP/IP. Maurizio Cozzetto. Brescia 20 agosto 2014

Transcript:

Cifratura Cifratura simmetrica Alice canale insicuro Bob 2

Cifratura simmetrica m Algoritmo di decifratura m Alice canale insicuro Algoritmo di cifratura Bob 3 Cifrari simmetrici chiave privata k chiave privata k C CIFRA(k,M) C M DECIFRA(k,C) Alice messaggio M canale insicuro Bob 4

Cifrario di Cesare Svetonio (Vitae Caesarorum): lettera di Cesare a Cicerone 100-44 a.c. A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 testo in chiaro X M+3 mod 26 OMNIA GALLIA EST DIVISA IN PARTES TRES RPQLD JDOOLD HVW GLYLVD LQ SDUWHV WUHV testo cifrato 5 Cifrari con shift A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Chiave K X M+K mod 26 K 0,1,,25 6

Cifratura di dati testuali Scriviamo un programma che Legge da un file di testo, un carattere alla volta Cifra un carattere alla volta, usando un cifrario con shift Scrive in un file i caratteri cifrati, uno alla volta 7 Cifratura di dati testuali int next = in.read(); //leggi il prossimo char if (next == -1) done = true; else //il file non è terminato char b = (char)next; //converti in char char c = encrypt(b); //cifra il char out.write(c); //scrive il char cifrato 8

File Shift.java import java.io.*; public class Shift /** Costruisce un cifrario con shift. @param akey la chiave di cifratura public Shift(int akey) if (akey >25) throw new NumberFormatException("La chiave deve essere un intero tra 1 e 25"); else key = akey; 9 /** Cifra il contenuto di un file. @param infile il file di ingresso @param outfile il file di uscita public void encryptfile(file infile, File outfile) throws IOException Reader in = null; Writer out = null; try in = new FileReader(inFile); out = new FileWriter(outFile); encryptcharstream(in, out); finally if (in!= null) in.close(); if (out!= null) out.close(); 10

/** Cifra il contenuto di un flusso. @param in il flusso di ingresso @param out il flusso di uscita public void encryptcharstream(reader in, Writer out) throws IOException boolean done = false; while (!done) int next = in.read(); if (next == -1) done = true; else char b = (char)next; char c = encrypt(b); out.write(c); 11 /** Cifra un char. @param b il char da cifrare @return il char cifrato public char encrypt(char b) String s = "abcdefghijklmnopqrstuvwxyz"; int i = 0; while (i < 26) if (b == s.charat(i)) return s.charat((i + key +26)%26); else if (b == Character.toUpperCase(s.charAt(i))) return Character.toUpperCase(s.charAt((i+ key +26)%26)); i++; return b; private int key 12

Argomenti sulla riga di comando Scriviamo un programma Crypt che testa la classe Shift Legge il nome del file da cifrare e la chiave di cifratura dalla riga di comando 13 Argomenti sulla riga di comando Argomenti accettati -d per indicare la decifratura -k per indicare la chiave (3 di default) Il nome del file input Il nome del file output Esempio: java Crypt input.txt encrypt.txt java Crypt d k11 encrypt.txt output.txt 14

Argomenti sulla riga di comando 15 File Crypt.java import java.io.file; import java.io.ioexception; public class Crypt public static void main(string[] args) boolean decrypt = false; int key = DEFAULT_KEY; File infile = null; File outfile = null; if (args.length < 2 args.length > 4) usage(); 16

try for (int i = 0; i < args.length; i++) if (args[i].charat(0) == '-') // è un opzione della riga comandi char option = args[i].charat(1); if (option == 'd') decrypt = true; else if (option == 'k') key = Integer.parseInt(args[i].substring(2)); 17 else // è il nome di un file if (infile == null) infile = new File(args[i]); else if (outfile == null) outfile = new File(args[i]); else usage(); if (decrypt) key = -key; Shift crypt = new Shift(key); crypt.encryptfile(infile, outfile); catch (NumberFormatException exception) System.out.println(exception); 18

catch (IOException exception) System.out.println("Errore nel processare il file: " + exception); /** Stampa un messaggio che descrive l uso corretto, poi termina il programma. public static void usage() System.out.println( "Utilizzo: java Crypt [ d] [ kn] infile outfile"); System.exit(1); public static final int DEFAULT_KEY = 3; 19 Cifratura di dati binari Scriviamo un programma che Legge da un file dati binari, un byte alla volta Cifra i dati, un byte alla volta, usando un cifrario con shift Scrive in un file i byte cifrati, uno alla volta 20

Cifratura di dati binari int next = in.read(); //leggi il prossimo byte if (next == -1) done = true; else //il file non è terminato byte b = (byte)next; //converti in byte byte c = encrypt(b); //cifra il byte out.write(c); //scrive il byte cifrato 21 File Shift.java import java.io.*; public class Shift /** Costruisce un cifrario con shift. @param akey la chiave di cifratura public Shift(int akey) key = akey; 22

/** Cifra il contenuto di un file. @param infile il file di ingresso @param outfile il file di uscita public void encryptfile(file infile, File outfile) throws IOException InputStream in = null; OutputStream out = null; try in = new FileInputStream(inFile); out = new FileOutputStream(outFile); encryptstream(in, out); finally if (in!= null) in.close(); if (out!= null) out.close(); 23 /** Cifra il contenuto di un flusso. @param in il flusso di ingresso @param out il flusso di uscita public void encryptstream(inputstream in, OutputStream out) throws IOException boolean done = false; while (!done) int next = in.read(); if (next == -1) done = true; else byte b = (byte)next; byte c = encrypt(b); out.write(c); 24

/** Cifra un byte. @param b il byte da cifrare @return il byte cifrato public byte encrypt(byte b) return (byte)(b + key); private int key; 25