Python – Liste dinamiche

Jacek Yerka

La gestione di una lista richiede in primis la sua definizione, come sempre deve avvenire:

lista[0]=b

quindi si usa il semplice comando:

lista.append(b)

L’usa delle liste dinamiche è utile se non si conoscono le dimensioni della lista che si vuole gestire ma ha lo svantaggio che se non usata in maniera oculata essa potrebbe portare al riempimento della memoria.

E’ una struttura dati da sconsigliare oppure da usare mettendo sempre e comunque un limite.

Con il seguente comando conosco la lunghezza della lista:

n=len(lista)

Per vedere a video la lista posso usare questo semplice metodo:

print(lista)

oppure posso stampare in orizzontale i suoi elementi:

for i in range(0,n):
print(lista[i],” “,end=’ ‘)

Con il seguente comando verifico che si siano immessi dei valori numerici:

if(g>47 and g<58):

b=int(b)
lista[0]=b

da notare che controllo il tipo di dato nella sua rappresentazione interna.

Con il comando:

b=b.upper()

faccio diventare maiuscolo la lettera immessa.

Il seguente programma effettua la somma dei numeri immessi in una lista dinamica finchè l’utente non inserisce la lettera S maiuscola.

#

Python 3.6.2

#Autore: Francesco Bragadin

#Data creazione: 28/12/2018

#Ultima modifica: 28/12/2018

#

#Nome file: listadinamica.py

#

#Commenti:

#lista di dimensione infinita e somma dei suoi elementi

#solo in python ho liste dinamiche con allocazione infinita

#da sconsigliare in quanto occupa dimensione infinita di memoria

#

#definisco l’oggetto lista

lista=[0]
b=0

g=0

#inserisco il primo valore della lista

b=input(“Inserisco il valore finchè non scrivi S: “)

#controllo che il valore sia un intero per effettuarbi la somma

g=ord(b)
if(g>47 and g<58):

#quindi posso fare la conversione da stringa ad intero senza mai sbagliare

b=int(b)
lista[0]=b

else:
b=b.upper()

#uso del ciclo while finisco il ciclo finchè non inserisco il valore S

while b!=’S’:
b=input(“Inserisco il valore finchè non scrivi S: “)
g=ord(b)
if(g>47 and g<58):

#quindi posso fare la conversione da stringa ad intero senza mai sbagliare

    b=int(b)
    lista.append(b)

#il comando append inserisce un elemento in fondo alla lista

else:
    b=b.upper()

#voglio sapere quanti sono i valori che ho inserito

n=len(lista)
print(“Lunghezza della lista: “, n)

print(“Lista primo metodo”)
print(lista)

#oppure la stampo elemento per elemento in orizzontale – terzo metodo –

print(“Terzo metodo di stampa della lista”)
for i in range(0,n):
print(lista[i],” “,end=’ ‘)

#mi serve solo per andare a capo

print(‘ ‘)

s=0

#Sommo gli elementi della lista

#Da notare che la prima volta del ciclo s=0

#le volte successiva s memorizza il valore precedente e lo somma al nuovo

#valore del vettore

for i in range(0,n):
s=s+lista[i]

#la somma dei suoi elementi

print(“La somma degli elementi risulta: “,s)

b=int(b)
lista[0]=b

Pubblicato in Senza categoria | Lascia un commento

Maturità 2019

Giorgio De Chirico

6 commissari di cui 3 interni e 3 esterni.

Sono presenti tutte le materie d’indirizzo

Ecco le materie per l’indirizzo Informatica e Telecomunicazioni:

Prima prova scritta affidata al commissario esterno
Italiano
Seconda prova scritta affidata al commissario interno
Informatica – Sistemi e reti
Orale – Commissari esterni
Inglese
Tecnologie e Progettazione Sistemi Informatici e Telecomunicazioni


Pubblicato in Senza categoria | Lascia un commento

TPSIT – Crittografia – Esercizi con Fermat ed Eulero

Kandiskij

Risolvere:

2^{75}\;mod\;5

5^{89}\;mod\;7

4^{90}\;mod\;11

16^{96}\;mod\;13

56681^{123432}\;mod\;13

14^{54}\;mod\;10

26^{32}\;mod\;12

7^{19}\;mod\;15

9^{9}\;mod\;6

Pubblicato in Senza categoria | Lascia un commento

TPSIT – Crittografia – Teorema d Eulero


Una conseguenza del piccolo teorema di Fermat è la seguente:

Sia m ed n positivi e p primo e m\;mod\;(p-1)=n\;mod\;(p-1) allora:

a^{m}\;mod\;p=a^{n}\;mod\;p

relazione molto utile per la cifratura a chiave asimmetrica RSA.

Il teorema di Fermat è generalizzato dal teorema di Eulero:

per ogni n ed ogni a che è coprimo (nessun divisore comune) di n vale la relazione

a^{\varphi (n)}\;mod\;n=1\;mod\;n

La funzione \varphi (n) è la funzione di Eulero che conta il numero di interi tra 1 ed n coprimi rispetto ad n.

Ad esempio:

\varphi (8)=4 infatti i numeri coprimi di 8 sono 1, 3, 5 e 7.

Ma come si calcola \varphi(p)?

Prima proposizione

Se p è un numero primo allora

\varphi (p^{k})=p^{k}-p^{k-1}

Seconda proposizione

se n=a\cdot b con a e b che non hanno alcun MCD se non l’1 allora

\varphi (a\cdot b)=\varphi(a)\varphi(b)

Corollario

se n=p_{1}^{k_{1}}\cdot p_{2}^{k_{2}}\cdot\cdot\cdot p_{k}^{k_{k}} con p_{1} e p_{k} numeri primi distinti allora:

\varphi(n)=(p_{1}^{k_{1}}-p_{1}^{k_{1}-1})\cdot\cdot\cdot (p_{r}^{k_{r}}-p_{r}^{k_{r}-1})

Pubblicato in Senza categoria | Lascia un commento

TPSIT – Crittografia – Piccolo teorema di Fermat

Se p è un numero primo allora

a^{p}\equiv a\;mod\;p

equivalente a:

a^{p}\;mod\;p=a\;mod\;p

una sua conseguenza

a^{p-1}\;mod\;p=1\;mod\;p

equivalente a:

a^{p-1}\equiv 1\;mod\;p

fondamentale che p sia un numero primo!

Esempi di sua applicazione

Tabella dei numeri primi

2^{3}\;mod\;3=2\;mod\3=2

10^{29}\;mod\;29=10\;mod\;29=10

15^{28}\;mod\;29=1\;mod\;29=1

Pubblicato in Senza categoria | Lascia un commento

TPSIT Crittografia – La macchina Enigma

La macchina enigma nasce nel 1918 e venne pesantemente usata durante la seconda guerra mondiale dalle Potenze dell’Asse (Germania – Italia – Giappone).

A differenza di ciò che viene comunemente detto, la progettazione aveva reso il sistema di crittograzione pressochè inattaccabile dal punto di vista tecnico. Uno dei fattori che hanno contribuito alla sua vulnerabilità sono state le alcune disattenzioni quotidiane, infatti, permisero ai crittoanalisti di Blet-chley Park di raccogliere degli indizi (cribs) su quale fosse la chiave utilizzatata.

Eccone alcuni:

  • I messaggi spesso presentavano lo stesso testo di apertura, molti comincia-vano con la parolaSpruchnummer(messaggio numero) e molti messaggidell’aeronautica con la fraseAn die Gruppe(al gruppo)
  • I messaggi spesso terminavano con Heil Hitler!
  • messaggi spesso contenevano frasi di routine comeKienebesondere Erei-gnisse(niente da segnalare)

Il funzionamento si basa sul disco usato dall’italiano Alberti del 1500 e la sua versione elettrica è stata implementata nel 1918.

La macchina era formata da tre rotori nei quali vi erano incise le 26 lettere dell’alfabeto e un altro che codificava le stesse lettere. Dopo la prima codifica se ne effettuava un’altra con un secondo rotore e poi un altra ancora con un terzo rotore quindi alla fine si avevano 26 x 26 x 26 possibili: una disposizione con ripetizione ossia 17576 differenti disposizioni.

Inoltre i rotori possono essre scambiati ossia si hanno 3! permutazioni semplici (abbiamo un tavolo con tre posti a disposizione e voglio sapere tutti i possibili midi in cui posso far sedere le tre persone). Inoltre si erano creati ulteriori fattori per aumentare la complessità fino ad arrivare a quasi dieci milioni di miliardi di combinazioni diverse!


I rotori erano colegati con dei collegamenti elettrici: osservando con attenzione lo schema precedente si può capire il suo funzionamento.

Questa è la situazione di partenza.

Si vuole spedire la lettera A.

Si collega al primo rotore in cui sulla stessa riga vi è,a destra, la lettera A.

Il rotore D è collegato alla lettera A nella parte sinistra, alla stessa riga della lettera A, a sinistra, del rotore D, corrisponde la lettera Q del rotore C.

Il rotore C è collegato alla lettera Q nella parte sinistra. Alla corrispondente riga si collega il rotore S con la lettera G.

Il rotore S nella parte sinistra alla lettera Q si collega alla stessa riga del riflettore alla lettera K. La lettera K a sinistra si collega alla lettrera Q ed il segnale torna indietro collegandosi alla parte sinistra e la rispettiva lettera a destra e così via fino a tornare al pannello.

La lettera A è dventata D.

Dopo aver trasmesso la prima lettera il rotore D ruota di un posto e se volessimo trasmettere nuovamente la lettera A adesso troverebbe la lettera S del rotore D e poi si procede come prima.

Dopo che il primo rotore ha compiuto un giro intero, gira di una posizione il rotore C. Dopo che il rotore C ha compiuto un giro intero, il rotore S si sposta di una posizione.

All’inizio della trasmissione quindi si dovevano mandare le tre lettere di partenza dei rotori.

Una latro fattore che rende critica la trasmissione è che con la stessa chiave si decritta il messaggio.

Una simulazione del suo funzionamento si ha nel sito:

http://www.crittologia.eu/critto/enigma_mat.html

Un video con i dettagli della macchina enigma è l seguente:

Pubblicato in Senza categoria | Lascia un commento

TPSIT- Crittografia – Cifrario di Vigenère

Pubblicato nel 1586, il cifrario di Blaise de Vigenère fu ritenuto per secoli inattaccabile, godendo di una fama in buona parte immeritata essendo molto più debole di altri cifrari polialfabetici precedenti, elaborati dall’Alberti o dal Belasio.

Esso si basa sulla generalizzazione del cifrario di Cesare ma, a differenza di questo che fissava una chiave unica per tutto il messaggio, utilizza una parola che fa cambiare la codifica della lettera ogni volta. Tale parola viene chiamata verme perchè si ripete ogni volta sotto la parola da codificare.

Ad esempio si vuole spedire il messaggio:

TRUPPEFERME
V
O
C
EVOCEV
OC

Il mesaggio è “Truppe ferme” il verme è “VOCE” e si ripete tante vote quanto è lungo il messaggio stesso.

Ad ogni lettera del messaggio da spedire si associa la relativa posizione partendo dallo 0:

A
0
B1
C2
D3
E4
F5
G6
H7
I8
J9
K10
L11
M12
N13
O14
P15
Q16
R17
S18
T19
U20
V21
W22
X23
Y24
Z25

Quello che si realizza è un’addizione modulo 26 (Crittografia modulare), in quest termini:

T
19
V21
O = 14 = 40 mod 2640


Alla lettera T si è associato il valore 19, alla lettera V il numero 21.

Li sommo e risulta 40. Effettuo l’operazione 40 mod 26 =14 e corrisponde alla lettera O.

Pensando che l’algebra modulare è stata introdotta solo di recente, il Vigenerè utilizza la tabella precedente ossia nella riga trova la lettera T, alla colonna trova la lettera V, il loro incorcio mi fornisce la lettera di de messaggio decodificato.


R17
O14
F=5 =31 mod 26
31

Quiundi il messaggio che viene trasmesso risulterà:

OFWTKSHIMAG che si determina appunto mediante il metodo precedentemente esposto.

CONCLUSIONI

A differenza dell’Alberti che utilizzava una cifratura polialfabetica, ossi un alfabeto diverso per gruppi di lettere, quest’ultimo usa sempre lo stesso alfabeto e conseguentemente una probabilità maggiore di essere decrittato.

Pubblicato in Senza categoria | Lascia un commento

TPSIT – Crittografia – dall’Alberti al Bellaso – sviluppo della cifratura polialfabetica

De Chirico

Il Bellaso  nel 1553 a Venezia pubblica La cifra in cui spiega la crittografia polialfabetica, sviluppando quella dell’Alberti ed evitando di indicare nello stesso corpo del crittogramma le lettere di riferimento e di liberare i corrispondenti dalla necessità di scambiarsi dischi o tabelle precompilate.

La sua idea è quella di avere una parola chiave (verme) e la scelta di un’opportuna frase che indica quale alfabeto utilizzare che nasce dalla parola chiave.

L’idea su cui si basa il principale cifrario proposto dal Bellaso è quella di ricavare cinque alfabeti da una parola segreta convenuta.

Le lettere dell’alfabeto vengono scritte in una tabella composta da due righe.

In particolare quelle della parola segreta sono inserite nelle prime colonne intercalate sulle due righe e  le rimanenti lettere dell’alfabeto vengono scritte di seguito.

In questo modo si è ottenuto il primo alfabeto derivato.

A partire da questo ricaviamo il secondo spostando circolarmente verso destra la seconda riga di una posizione.

Applicando lo stesso procedimento al secondo alfabeto, si ricava il terzo alfabeto derivato e così via fino ad ottenerne cinque, ognuno dei quali sarà identificato da un gruppo di quattro lettere. 

Facendo riferimento sempre al primo alfabeto, le lettere della prima e della sesta colonna identificano il primo alfabeto derivato, quelle della seconda e della settima colonna identificano il secondo alfabeto derivato.

In generale le quattro lettere che identificano l’ i-esimo alfabeto sono quelle dell’ i-esima e della (i + 5)-esima colonna.

A questo punto si deve convenire una frase segreta; le lettere di quest’ultima servono a selezionare l’alfabeto da usare.

In particolare, presa l’i-esima lettera della  parola segreta, si controlla quale dei cinque identificativi degli alfabeti la contiene.

Si determina così l’alfabeto da usare per l’i-esima parola del testo in chiaro. Se il numero di lettere della frase segreta è minore del numero di parole del testo da cifrare, la frase segreta viene riapplicata ciclicamente per la selezione degli alfabeti.

La cifratura si effettua sostituendo la lettera del testo in chiaro con la lettera che si trova sulla stessa colonna nell’alfabeto predeterminato.     

Riportiamo un esempio: data la parola chiave IOVE, il primo alfabeto derivato(alfabeto latino di 20 lettere, posta V=U) è: 

I O A B C D F G H L
V E M N P Q R S T X

Il secondo si ottiene spostando circolarmente la seconda riga:


I
O A B C D F G H L
X V E M N P Q R S T

Le quattro lettere che identificano il primo alfabeto sono IDVQ (mi sono spostato di 5), quelle della prima e della sesta colonna del primo alfabeto derivato.

Le quattro lettere che identificano il secondo alfabeto sono OFER, quelle della seconda e settima colonna sempre del primo alfabeto derivato. 










I D V Q I O A B C D F G H L
VEMNPQRSTX

O F E R
I O A B C D F G H L
XVEMNPQRST
A G M S I O A B C D F G H L
TXVEMNPQRS
B H N T I O A B C D F G H L
STXVEMNPQR
C L P X   I O A B C D F G H L
RSTXVEMNPQ

A questo punto si deve convenire una frase segreta, per esempio ” OPTARE MELIORA”; le lettere di quest’ultima servono a selezionare l’alfabeto da usare. 

Volendo allora cifrare la frase “Inviare truppe domani” si ha:

                                   O                            P                         T 
Testo in Chiaro    I N V I A R E         T R U P P E       D O M A N I
Testo Cifrato       X C O X E G A       A I C H H D      M T D X F S
Pubblicato in Senza categoria | Lascia un commento

TPSIT – Crittografia – Cifratura Polialfabetica

Si è nel 1467 e Leon Battista Alberti  scrive De cifris , conservato nella biblioteca Marciana a Venezia, e introduce la crittografia nell’epoca moderna.

Esso si compone di due dischi concentrici, in cui in uno vi è l’alfabeto perfettamente ordinato, nell’altro le lettere poste in maniera casuale.

Permette la sostituzione delle lettere con periodi irregolari.

Indice mobile

Si fissa una lettera nel cerchio interno ad esempio la g (indice da cui si parte) a cui corrisponde la A nel cerchio esterno. Si avranno i seguenti alfabeti:

disco stabile: ABCDEFGILMNOPQRSTVXZ1234

disco mobile: gklnprtuz&xysomqihfdbace

Si supponga di voler spedire il messaggio:

LAGVER2RA

esso si codifica come:

zgthpmamg

All’inizio del messaggio cifrato si inserisce la lettera a cui dovrà puntare la lettera g (indice) ossia alla lettera A. Ossia il disco interno metterà sempre la g che punta alla A. Da notare che è stato inserito un 2 e viene eliminato nella fase di decifrazione. Viene inserito il 2 per evitare di mettere due volte la stessa lettera nel messaggio cifrato.

Il messaggio inviato sarà dunque:

Azgthpmamg

Adesso si vuole cambiare ad esempio la g dovrà puntare ad un’altra lettera , ad esempio la Q, facendo ruotare il disco interno e si avrà questo nuovo alfabeto:

disco stabile: ABCDEFGILMNOPQRSTVXZ1234

disco mobile: ysomqihfdbacegklnprtuz&x

Quindi la g punterà alla Q

voglio mandare il messaggio: SI FARA’

Qlfiyky

l messaggio completo sarà quindi:

AzgthpmamgQlfiyky

Da notare che la lettera maiuscola indica il fatto che si debba ruotare il disco interno.

Indice fisso

In questo caso l’indice fisso viene posto nel disco esterno ad esempio la A  e si mette la m come lettera corrispondente nel cerchio interno.

disco stabile: ABCDEFGILMNOPQRSTVXZ1234

disco mobile: mqihfdbacegklnprtuz&xyso

Spedisco il messaggio:

LAGVERA3

Si nota che si toglie la doppia per evitare la decifratura.

esso diventa

cmbufpms

come prima lettera però si inserisce la lettera a cui punta il disco esterno ossia diventa:

mcmbufpms

Si noti che il numero 3 indica il fatto che adesso la lettera s punterà alla A e non più la m avendo un nuovo alfabeto:

disco stabile: ABCDEFGILMNOPQRSTVXZ1234

disco mobile: somqihfdbacegklnprtuz&xy

Invio adesso:

SIFARÀ

sndhsls

CONCLUSIONE

La cifratura di Cesare è una sostituzione semplice, basata sullo spostamento di un unico alfabeto ordinato rispetto a sé stesso, con chiave fissa.

Nella cifra di Alberti gli alfabeti sono due, mischiati, e la chiave varia in continuazione durante il messaggio, quindi la scoperta di una sola lettera non permette altri progressi nella decrittazione e lo studio delle frequenze non dà risultati perché la stessa lettera. chiara è cifrata sempre in modo diverso.

Pubblicato in Senza categoria | Lascia un commento

TPSIT – Crittografia – Esempio di Diffie – Hellman

De Chirico

•g = 5, p = 23 (pubblici)

•a = 6 (Alice)

•b = 15 (Bob)

Si chiede di calcolare K sia per Alice che per Bob

Svolgimento

Alice calcola A = 5^{6}\;mod\;23 = 8 e lo comunica a Bob

Bob calcola B = 5^{15}\:mod\;23 = 19 e lo comunica ad Alice 

Alice calcola K = 19^{6}\;mod\;23 = 2

Bob calcola K = 8^{15}\;mod\;23 = 2 

Come calcolare le potenze

5^{15}\;mod\;23=5^{8}\cdot 5^{4}\cdot 5^{2}\cdot 5^{1}\;mod\;23 = [5^{8}\;mod\;23\cdot 5^{4}\;mod\;23\cdot5^{2}\;mod\;23\cdot 5^{1}\;mod\;23]\;mod\;23

5^{1}\;mod\;23 = 5

5^{2}\;mod\;23 = 25\;mod\;23 = 2

5^{4}\;mod\;23 = (5^{2})^{2}\;mod\;23 = (5^{2}\;mod\;23)^{2}\;mod\;23 = 2^{2}\;mod\;23 = 4\;mod\;23 = 4 

5^{8}\;mod\;23 = (5^{4})^{2}\;mod\;23 = (5^{4}\;mod\;23)^{2}\;mod\;23 = 4^{2}\;mod\;23 = 16\;mod\;23 =16

5^{15}\;mod\;23 = [16 \cdot  4 \cdot  2 \cdot  5]\; mod\;23 = 640\; mod\;23 = 19

Esercizio

•g = 7, p = 31 (pubblici)

•a = 5 (Alice)

•b = 12 (Bob)

•K = ? 

Pubblicato in Senza categoria | Lascia un commento