Aggiunte docstrings
This commit is contained in:
parent
88409f3013
commit
ad9c548fc3
@ -1,4 +1,4 @@
|
||||
from crittografia.numeri import *
|
||||
from .numeri import *
|
||||
|
||||
alfabeto = tuple("abcdefghijklmnopqrstuvwxyz")
|
||||
ordinale = dict([(k,i) for i,k in enumerate(alfabeto)])
|
||||
@ -6,13 +6,16 @@ ordinale = dict([(k,i) for i,k in enumerate(alfabeto)])
|
||||
class codifica:
|
||||
|
||||
def __init__(self, valore):
|
||||
valore = str(valore)
|
||||
if valore.isnumeric():
|
||||
self.numero = int(valore)
|
||||
else:
|
||||
self.stringa = valore
|
||||
"""
|
||||
Inizializzazione
|
||||
Fornire una stringa da crittografare.
|
||||
"""
|
||||
self.stringa = valore
|
||||
|
||||
def rot13(self):
|
||||
"""
|
||||
Cifrario ROT13
|
||||
"""
|
||||
rotazione = str.maketrans(
|
||||
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
||||
"nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM"
|
||||
@ -20,6 +23,11 @@ class codifica:
|
||||
return str.translate(self.stringa, rotazione)
|
||||
|
||||
def vigenère(self, verme):
|
||||
"""
|
||||
Cifrario di vigenère
|
||||
Fornire una chiave alfabetica di lunghezza
|
||||
minore della stringa. (verme)
|
||||
"""
|
||||
self.stringa = self.stringa.lower().replace(" ","")
|
||||
cifrata = ""
|
||||
for i in range(len(self.stringa)):
|
||||
@ -27,6 +35,10 @@ class codifica:
|
||||
return cifrata
|
||||
|
||||
def gödel(self, primo):
|
||||
"""
|
||||
Numero di Gödel
|
||||
Specificare un numero primo di partenza.
|
||||
"""
|
||||
self.stringa = self.stringa.lower().replace(" ","")
|
||||
cifrata = 1
|
||||
sequenza = primi.lista(primo, len(self.stringa))
|
||||
@ -35,6 +47,11 @@ class codifica:
|
||||
return cifrata
|
||||
|
||||
def vernam(self, pad=()):
|
||||
"""
|
||||
Cifrario di Vernam
|
||||
Se non si fornisce un one-time-pad ne viene generato
|
||||
uno in automatico.
|
||||
"""
|
||||
self.stringa = self.stringa.lower().replace(" ","")
|
||||
cifrata = ""
|
||||
if pad is ():
|
||||
@ -46,11 +63,19 @@ class codifica:
|
||||
class decodifica:
|
||||
|
||||
def __init__(self, valore):
|
||||
valore = str(valore)
|
||||
if valore.isnumeric(): self.numero = int(valore)
|
||||
else: self.stringa = str(valore)
|
||||
"""
|
||||
Inizializzazione
|
||||
Fornire una stringa o un numero (di gödel) da decrittografare.
|
||||
"""
|
||||
if str(valore).isnumeric():
|
||||
self.numero = valore
|
||||
else:
|
||||
self.stringa = valore
|
||||
|
||||
def rot13(self):
|
||||
"""
|
||||
Cifrario ROT13
|
||||
"""
|
||||
rotazione = str.maketrans(
|
||||
"nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM",
|
||||
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
@ -58,6 +83,10 @@ class decodifica:
|
||||
return str.translate(self.stringa, rotazione)
|
||||
|
||||
def vigenère(self, verme):
|
||||
"""
|
||||
Cifrario di vigenère
|
||||
Fornire la chiave usata per crittografare la stringa. (verme)
|
||||
"""
|
||||
self.stringa = self.stringa.lower().replace(" ","")
|
||||
decifrata = ""
|
||||
for i in range(len(self.stringa)):
|
||||
@ -65,6 +94,11 @@ class decodifica:
|
||||
return decifrata
|
||||
|
||||
def gödel(self, primo, n):
|
||||
"""
|
||||
Numero di Gödel
|
||||
Specificare un numero primo di partenza e
|
||||
la lunghezza della stringa.
|
||||
"""
|
||||
decifrata = ""
|
||||
for i in primi.lista(primo,n):
|
||||
lettera = -1
|
||||
@ -75,6 +109,10 @@ class decodifica:
|
||||
return decifrata
|
||||
|
||||
def vernam(self, pad):
|
||||
"""
|
||||
Cifrario di Vernam
|
||||
Fornire il one-time-pad usato per crittografare la stringa.
|
||||
"""
|
||||
self.stringa = self.stringa.lower().replace(" ","")
|
||||
cifrata = ""
|
||||
for i in range(len(self.stringa)):
|
||||
|
@ -1,4 +1,5 @@
|
||||
import math, random, itertools, pyaudio
|
||||
import math, random, itertools
|
||||
import pyaudio
|
||||
|
||||
opzioni = {
|
||||
"format": pyaudio.paFloat32,
|
||||
@ -11,34 +12,52 @@ opzioni = {
|
||||
class primi:
|
||||
|
||||
def primo(n):
|
||||
"""
|
||||
Restituisce True se n è primo altrimenti restituisce False.
|
||||
"""
|
||||
for i in range(3, int(math.sqrt(n)) + 1,2):
|
||||
if n % i == 0:
|
||||
return False
|
||||
return True
|
||||
|
||||
def prossimo(n):
|
||||
if n % 2 == 0: n += 1
|
||||
"""
|
||||
Restituisce il più piccolo numero primo maggiore di n.
|
||||
[Generatore]
|
||||
"""
|
||||
if n % 2 == 0:
|
||||
n += 1
|
||||
while True:
|
||||
n += 2
|
||||
if primi.primo(n):
|
||||
yield n
|
||||
|
||||
def lista(p, n):
|
||||
"""
|
||||
Restituisce una n-tupla con i numeri primi maggiori di p.
|
||||
"""
|
||||
return tuple([p for p in itertools.islice(primi.prossimo(p), n)])
|
||||
|
||||
class generatore:
|
||||
|
||||
def caso(inizio, fine, stop):
|
||||
def caso(inizio, fine, n):
|
||||
"""
|
||||
Restituisce n interi casuali nell'intervallo [inizio; fine).
|
||||
[Generatore]
|
||||
"""
|
||||
audio = pyaudio.PyAudio()
|
||||
input = audio.open(**opzioni)
|
||||
dati = input.read(opzioni["rate"]//opzioni["frames_per_buffer"] * stop//2)
|
||||
dati = input.read(opzioni["rate"]//opzioni["frames_per_buffer"] * n//2)
|
||||
input.close()
|
||||
audio.terminate()
|
||||
dati = [i for i in dati if i != 0]
|
||||
dati = [i for i in dati if i in range(inizio,fine)]
|
||||
random.shuffle(dati)
|
||||
for i in range(stop):
|
||||
for i in range(n):
|
||||
yield dati[i]
|
||||
|
||||
def onetimepad(l):
|
||||
"""
|
||||
Ritorna una l-tupla di interi casuali per un one-time-pad.
|
||||
"""
|
||||
return tuple(generatore.caso(0,2*16,l))
|
||||
|
@ -1,16 +1,20 @@
|
||||
from crittografia.numeri import *
|
||||
from .numeri import *
|
||||
|
||||
max = 2**(16)
|
||||
|
||||
class codifica:
|
||||
|
||||
def __init__(self, valore):
|
||||
valore = str(valore)
|
||||
if valore.isnumeric():
|
||||
self.numero = int(valore)
|
||||
else: self.stringa = valore
|
||||
"""
|
||||
Inizializzazione
|
||||
Fornire una stringa da crittografare.
|
||||
"""
|
||||
self.stringa = valore
|
||||
|
||||
def rot13(self):
|
||||
"""
|
||||
Cifrario ROT13
|
||||
"""
|
||||
rotazione = str.maketrans(
|
||||
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
||||
"nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM"
|
||||
@ -18,12 +22,21 @@ class codifica:
|
||||
return str.translate(self.stringa, rotazione)
|
||||
|
||||
def vigenère(self, verme):
|
||||
"""
|
||||
Cifrario di vigenère
|
||||
Fornire una chiave alfabetica di lunghezza
|
||||
minore della stringa. (verme)
|
||||
"""
|
||||
cifrata = ""
|
||||
for i in range(len(self.stringa)):
|
||||
cifrata += chr((ord(self.stringa[i]) + ord(verme[i % len(verme)])) % max)
|
||||
return cifrata
|
||||
|
||||
def gödel(self, primo):
|
||||
"""
|
||||
Numero di Gödel
|
||||
Specificare un numero primo di partenza.
|
||||
"""
|
||||
cifrata = 1
|
||||
sequenza = primi.lista(primo, len(self.stringa))
|
||||
for i in range(len(self.stringa)):
|
||||
@ -31,6 +44,11 @@ class codifica:
|
||||
return cifrata
|
||||
|
||||
def vernam(self, pad=()):
|
||||
"""
|
||||
Cifrario di Vernam
|
||||
Se non si fornisce un one-time-pad ne viene generato
|
||||
uno in automatico.
|
||||
"""
|
||||
cifrata = ""
|
||||
if pad is ():
|
||||
pad = generatore.onetimepad(len(self.stringa))
|
||||
@ -41,13 +59,19 @@ class codifica:
|
||||
class decodifica:
|
||||
|
||||
def __init__(self, valore):
|
||||
valore = str(valore)
|
||||
if valore.isnumeric():
|
||||
self.numero = int(valore)
|
||||
"""
|
||||
Inizializzazione
|
||||
Fornire una stringa o un numero (di gödel) da decrittografare.
|
||||
"""
|
||||
if str(valore).isnumeric():
|
||||
self.numero = valore
|
||||
else:
|
||||
self.stringa = str(valore)
|
||||
self.stringa = valore
|
||||
|
||||
def rot13(self):
|
||||
"""
|
||||
Cifrario ROT13
|
||||
"""
|
||||
rotazione = str.maketrans(
|
||||
"nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM",
|
||||
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
@ -55,12 +79,21 @@ class decodifica:
|
||||
return str.translate(self.stringa, rotazione)
|
||||
|
||||
def vigenère(self, verme):
|
||||
"""
|
||||
Cifrario di vigenère
|
||||
Fornire la chiave usata per crittografare la stringa. (verme)
|
||||
"""
|
||||
decifrata = ""
|
||||
for i in range(len(self.stringa)):
|
||||
decifrata += chr((ord(self.stringa[i]) - ord(verme[i % len(verme)])) % max)
|
||||
return decifrata
|
||||
|
||||
def gödel(self, primo, n):
|
||||
"""
|
||||
Numero di Gödel
|
||||
Specificare un numero primo di partenza e
|
||||
la lunghezza della stringa.
|
||||
"""
|
||||
decifrata = ""
|
||||
for i in primi.lista(primo,n):
|
||||
lettera = -1
|
||||
@ -71,6 +104,10 @@ class decodifica:
|
||||
return decifrata
|
||||
|
||||
def vernam(self, pad):
|
||||
"""
|
||||
Cifrario di Vernam
|
||||
Fornire il one-time-pad usato per crittografare la stringa.
|
||||
"""
|
||||
cifrata = ""
|
||||
for i in range(len(self.stringa)):
|
||||
cifrata += chr((ord(self.stringa[i]) - pad[i]) % max)
|
||||
|
Loading…
Reference in New Issue
Block a user