Skip to content

Instantly share code, notes, and snippets.

@ScratchyCode
Last active January 30, 2023 02:13
Show Gist options
  • Save ScratchyCode/f1573676dccdde819138d7ad667dd4ad to your computer and use it in GitHub Desktop.
Save ScratchyCode/f1573676dccdde819138d7ad667dd4ad to your computer and use it in GitHub Desktop.
Script utili per applicare il cifrario di Hill con carta e penna
# 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)
# 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)
@ScratchyCode
Copy link
Author

update

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment