# Crittografia C++ (scuola media)

Il progetto ha lo scopo di istruire principalmente i ragazzi delle scuole secondarie di primo grado all'utilizzo del linguaggio C++.
Tramite la programmazione e l'esecuzione di un programma di crittografia, basato sul cifrario di Cesare ed il cifrario a trasposizione numerica, i ragazzi implementeranno la loro conoscenza del codice ed impareranno le basi della crittografia; questo argomento risulta molto attuale e presente nel mondo informatico soprattutto a causa delle recenti modifiche legislative volte ad aumentare la tutela della privacy degli utenti della rete. L'obiettivo principale è di istruire gli utenti all'utilizzo del linguaggio di programmazione C++ attraverso un progetto in grado di aumentare la loro conoscenza delle tecniche di scrittura base.

## Crittografia

Per "crittografia" si intende quella tecnica che permette di "cifrare" un messaggio rendendolo incomprensibile a tutti tranne che al suo destinatario, il quale possiede la soluzione per decodificarlo. In generale i due processi principali che vengono applicati in crittografia si dividono in "cifratura" e "codifica". La cifratura è un procedimento che, tramite una regola conosciuta, rende non comprensibile un testo; il procedimento inverso è detto codifica e permette di convertire il messaggio in un linguaggio comprensibile grazie alla conoscenza della soluzione.

### Tipologie di crittografia utilizzate
#### Cifrario di Cesare

Il cifrario di Cesare, chiamato così in onore di Giulio Cesare che lo utilizzava per proteggere i suoi messaggi segreti, è uno dei più antichi metodi di crittografia di cui si abbia traccia storica. È un metodo a sostituzione alfabetica in cui ogni lettera del testo da codificare è sostituita dalla lettera che si trova un certo numero di posizioni dopo nell'alfabeto; la chiave di cifratura, ovvero la quantità di posizioni in cui viene spostata la lettera, è definita dall'utente.

#### Cifrario a trasposizione numerica

Un cifrario a trasposizione numerica è un metodo di cifratura in cui le lettere vengono convertite in numeri seguendo l'ordine crescente dell'alfabeto, così che il testo cifrato costituisca una variante numerica del testo alfabetico.

## Il linguaggio C++

In informatica il C++ è un linguaggio di programmazione di alto livello che permette di eseguire operazioni complesse a partire da un codice sorgente composto da poche righe.
Nato nel 1983 dall’ingegno di Bjarne Stroustrup, allora ricercatore presso AT&T, C++ è tra i primi 5 linguaggi più utilizzati al mondo.
I campi di applicazione sono i più svariati: dal gaming alle applicazioni real-time, dai componenti per sistemi operativi ai software di grafica e musica, dalle app per cellulari ai sistemi per supercomputer. Praticamente, C++ è ovunque.

### Le variabili

Il linguaggio C++ prevede l'utilizzo di variabili, ovvero di valori che possono essere inseriti da tastiera (input) o elaborati dal programma e stampati a video (output). In base alla tipologia di variabile esistono differenti termini utilizzati:
* int = corrisponde a variabili numeriche intere (negative o positive);
* float = corrisponde a variabili numeriche non necessariamente decimali, ma che possono avere anche una parte decimale;
* char = corrisponde a variabili composte da un singolo carattere (che può essere anche speciale);
* string = corrisponde a variabili alfanumeriche, composte da lettere e numeri. I numeri inseriti non saranno trattati come numeri, ma come testo normale;
* bool = corrisponde a una variabile che può essere solo vera (1) o falsa (0)

### Costrutto selezione If/Else

Il costrutto If/Else è un comando utilizzabile per imporre la scelta di una condizione sulla base di due o piu opzioni; alla scelta di una determinata condizione corrisponde una azione univoca.

### Ciclo For

Il ciclo for è un comando in grado di far ripetere una o più azioni per un numero determinato di volte, definito da una variabile prestabilita.
L'utilizzo di tale strumento permette di non dovere ripetere molteplici volte lo stesso comando nel codice e di determinare quante ripetizioni avverranno prima dell'arresto.

### Funzioni di testo

Nel linguaggio C++ sono presenti due funzioni di testo, una necessaria a ricevere variabili dall'utente (input) ed una necessaria a stampare a video (output), e quindi proporre all'utente una variabile di qualsiasi tipo.
* cout<<"testo": è la funzione di output che permette di stampare a video ed imporre al programma di mostrare all'utente una determinata variabile.
* cin>>variabile: dopo aver definito la tipologia, questa funzione di input permette al programma di ricevere una o più variabili immesse dall'utente.

### L'intestazione iniziale

Per permettere ad un programma C++ di funzionare correttamente è necessario includere all'inizio di ogni codice

### Comando Return 0

Il comando di return 0 serve per interrompere subito il funzionamento del programma, facendolo terminare. Tecnicamente il comando ha anche altre funzioni, che non verranno approfondite adesso. Basti sapere che questo comando può utilizzare qualsiasi tipo di valore, che sia un numero intero, decimale, un carattere dell'alfabeto, una parola o addirittura una variabile.

## Il programma
### Come nasce l'idea

Il programma nasce dalla volontà frequente dei giovani di comunicare in un linguaggio segreto, e protetto, conosciuto soltanto dal mittente e destinatario. La scelta di utilizzare il linguaggio C++ è motivata dalla semplicità e dalla rapidità con cui tale codice permette di creare azioni che risulterebbero altrimenti complicate e molto lunghe.

### Obiettivi

L'obiettivo principale del programma è, tramite l'utilizzo del linguaggio C++, la codifica di parole con due differenti sistemi di criptaggio. Sono state scelti il cifrario di Cesare e il cifrario a trasposizione numerica perché entrambi molto semplici ed intuitivi, sono infatti basati sulla traslazione dell'alfabeto e della conversione delle lettere in numeri secondo uno schema ben definito.

### Analisi del programma

* Definizione delle variabili
* Il programma richiede all'utente il metodo di criptazione
* Il programma, tramite un ciclo If/Else, elabora la scelta e continua l'esecuzione con il metodo selezionato
* Se il metodo selezionato è il "cifrario di Cesare" viene richiesta all'utente la parola da criptare e l'immissione di un valore che rappresenterà la traslazione nell'alfabeto della lettera corrispondente. Successivamente, tramite un Ciclo For, viene stampata a video la parola composta dalle lettere dell'alfabeto secondo la chiave di cifraggio.
* Altrimenti, se viene selezionato il "cifrario a trasposizione numerica" il programma chiederà la parola da criptare.
* In seguito la parola verrà analizzata carattere per carattere tramite un ciclo For ed ogni lettera verrà sostituita dal numero corrispondente.
* Nel caso in cui venga selezionato un metodo di criptaggio differente da quelli proposti (1&2) il programma stamperà a video un messaggio di errore
* Il programma termina

### Esempio pratico
#### Cifrario di Cesare
#### Cifrario a trasposizione numerica
## Vedi anche

* w:Crittografia
* w:Cifrario_di_Cesare
* w:Cifrario_a_trasposizione