Last active
January 30, 2023 02:13
-
-
Save ScratchyCode/f1573676dccdde819138d7ad667dd4ad to your computer and use it in GitHub Desktop.
Script utili per applicare il cifrario di Hill con carta e penna
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Coded by Scratchy | |
# converte le lettere di un testo in numeri e viceversa per agevolare la cifratura hill | |
import numpy as np | |
dizionario = {'A':0,'B':1,'C':2,'D':3,'E':4,'F':5,'G':6,'H':7,'I':8,'J':9,'K':10,'L':11,'M':12,'N':13,'O':14,'P':15,'Q':16,'R':17,'S':18,'T':19,'U':20,'V':21,'W':22,'X':23,'Y':24,'Z':25,'.':26,',':27,'?':28} | |
# menu | |
print("Menu:\n1) numeri -> lettere\n2) lettere -> numeri\n") | |
scelta = int(input("Inserisci la scelta: ")) | |
if(scelta != 1 and scelta != 2): | |
exit() | |
dimvett = int(input("Inserisci la dimensione della matrice quadrata: ")) | |
n = int(input("Inserisci il numero di vettori: ")) | |
vettori = [] | |
valori = [] | |
chiavi = [] | |
# input dei vettori | |
for i in range(n): | |
# da numeri a lettere (ricerca per valori) | |
if(scelta == 1): | |
vettore = np.ndarray((dimvett,)) | |
for j in range(dimvett): | |
vettore[j] = int(input("Inserisci il coefficiente del vettore {} ({}): ".format(i,j))) | |
vettori.append(vettore) | |
# da lettere a numeri (ricerca per chiavi) | |
if(scelta == 2): | |
for j in range(dimvett): | |
lettera = input("Inserisci il coefficiente del vettore {} ({}): ".format(i,j)) | |
valore = dizionario[lettera] | |
valori.append(valore) | |
# ricerca nel dizionario per valore | |
if(scelta == 1): | |
for i in range(n): | |
for j in range(dimvett): | |
cerca = vettori[i] # adesso 'cerca' è un vettore estratto dalla lista | |
cerca = cerca[j] # adesso 'cerca' è un elemento estratto dal vettore | |
for chiave, valore in dizionario.items(): | |
if valore == cerca: | |
chiavi.append(chiave) | |
break | |
print(chiavi) | |
if(scelta == 2): | |
print(valori) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Coded by Scratchy | |
# inserisci i coefficienti di una matrice chiave e gli elementi di n vettori da moltiplicare modularmente | |
import numpy as np | |
n = int(input("Inserisci la dimensione della matrice quadrata: ")) | |
modulo = int(input("Inserisci il modulo di base (elementi dell'alfabeto): ")) # consigliato: 26 + 3 | |
matrice = np.zeros((n,n)) | |
# input dei coefficienti della matrice | |
for i in range(n): | |
for j in range(n): | |
matrice[i][j] = float(input("Inserisci il coefficiente ({},{}): ".format(i,j))) | |
m = int(input("Inserisci il numero di vettori da moltiplicare per la matrice: ")) | |
vettori = [] | |
# input dei vettori | |
for i in range(m): | |
vettore = np.zeros(n) | |
for j in range(n): | |
vettore[j] = float(input("Inserisci il coefficiente del vettore {} ({}): ".format(i,j))) | |
vettori.append(vettore) | |
# moltiplicazione dei vettori per la matrice | |
for i in range(m): | |
risultato = np.dot(matrice, vettori[i]) | |
risultato = np.mod(risultato,modulo) | |
print("Il risultato della moltiplicazione del vettore {} è: ".format(i), risultato) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
update