diff --git a/crittografia/alfabeto.py b/crittografia/alfabeto.py index 51bca56..039aa8a 100644 --- a/crittografia/alfabeto.py +++ b/crittografia/alfabeto.py @@ -1,26 +1,82 @@ -from crittografia.numeri import * alfabeto = tuple("abcdefghijklmnopqrstuvwxyz") -ordinale = dict([(k,i) for i,k in enumerate(alfabeto)]) class codifica: +from crittografia.numeri import * + +alfabeto = tuple("abcdefghijklmnopqrstuvwxyz") +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 - def rot13(self): rotazione = str.maketrans( + + def rot13(self): + rotazione = str.maketrans( "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM" - ) return str.translate(self.stringa, rotazione) def vigenère(self, verme): - self.stringa = self.stringa.lower().replace(" ","") cifrata = "" for i in range(len(self.stringa)): cifrata += alfabeto[(ordinale[self.stringa[i]] + ordinale[verme[i % len(verme)]]) % 26] return cifrata def gödel(self, primo): - self.stringa = self.stringa.lower().replace(" ","") cifrata = 1 sequenza = primi.lista(primo, len(self.stringa)) for i in range(len(self.stringa)): cifrata *= sequenza[i]**(ordinale[self.stringa[i]] + 1) return cifrata def vernam(self, pad=()): - self.stringa = self.stringa.lower().replace(" ","") cifrata = "" - if pad is (): pad = generatore.onetimepad(len(self.stringa)) for i in range(len(self.stringa)): cifrata += alfabeto[(ordinale[self.stringa[i]] + pad[i]) % 26] return cifrata, pad class decodifica: + ) + return str.translate(self.stringa, rotazione) + + def vigenère(self, verme): + self.stringa = self.stringa.lower().replace(" ","") + cifrata = "" + for i in range(len(self.stringa)): + cifrata += alfabeto[(ordinale[self.stringa[i]] + ordinale[verme[i % len(verme)]]) % 26] + return cifrata + + def gödel(self, primo): + self.stringa = self.stringa.lower().replace(" ","") + cifrata = 1 + sequenza = primi.lista(primo, len(self.stringa)) + for i in range(len(self.stringa)): + cifrata *= sequenza[i]**(ordinale[self.stringa[i]] + 1) + return cifrata + + def vernam(self, pad=()): + self.stringa = self.stringa.lower().replace(" ","") + cifrata = "" + if pad is (): + pad = generatore.onetimepad(len(self.stringa)) + for i in range(len(self.stringa)): + cifrata += alfabeto[(ordinale[self.stringa[i]] + pad[i]) % 26] + return cifrata, pad + +class decodifica: + def __init__(self, valore): valore = str(valore) if valore.isnumeric(): self.numero = int(valore) else: self.stringa = str(valore) - def rot13(self): rotazione = str.maketrans( + + def rot13(self): + rotazione = str.maketrans( "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - ) return str.translate(self.stringa, rotazione) def vigenère(self, verme): - self.stringa = self.stringa.lower().replace(" ","") decifrata = "" for i in range(len(self.stringa)): decifrata += (alfabeto[(ordinale[self.stringa[i]] - ordinale[verme[i % len(verme)]]) % 26]) return decifrata def gödel(self, primo, n): decifrata = "" for i in primi.lista(primo,n): lettera = -1 while self.numero % i == 0: self.numero /= i lettera += 1 decifrata += alfabeto[lettera % 26] return decifrata def vernam(self, pad): - self.stringa = self.stringa.lower().replace(" ","") cifrata = "" for i in range(len(self.stringa)): cifrata += alfabeto[(ordinale[self.stringa[i]] - pad[i]) % 26] return cifrata \ No newline at end of file + ) + return str.translate(self.stringa, rotazione) + + def vigenère(self, verme): + self.stringa = self.stringa.lower().replace(" ","") + decifrata = "" + for i in range(len(self.stringa)): + decifrata += (alfabeto[(ordinale[self.stringa[i]] - ordinale[verme[i % len(verme)]]) % 26]) + return decifrata + + def gödel(self, primo, n): + decifrata = "" + for i in primi.lista(primo,n): + lettera = -1 + while self.numero % i == 0: + self.numero /= i + lettera += 1 + decifrata += alfabeto[lettera % 26] + return decifrata + + def vernam(self, pad): + self.stringa = self.stringa.lower().replace(" ","") + cifrata = "" + for i in range(len(self.stringa)): + cifrata += alfabeto[(ordinale[self.stringa[i]] - pad[i]) % 26] + return cifrata \ No newline at end of file diff --git a/crittografia/numeri.py b/crittografia/numeri.py index c6a1d9f..f62cdf9 100644 --- a/crittografia/numeri.py +++ b/crittografia/numeri.py @@ -1,12 +1,34 @@ -import math, random, itertools, pyaudio opzioni = { +import math, random, itertools, pyaudio + +opzioni = { "format": pyaudio.paFloat32, "channels": 2, "rate": 96000, "input": True, "frames_per_buffer": 1024 -} class primi: def primo(n): 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 while True: n += 2 if primi.primo(n): - yield n def lista(p, n): return tuple([p for p in itertools.islice(primi.prossimo(p), n)]) class generatore: def caso(inizio, fine, stop): +} + +class primi: + + def primo(n): + 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 + while True: + n += 2 + if primi.primo(n): + yield n + + def lista(p, n): + return tuple([p for p in itertools.islice(primi.prossimo(p), n)]) + +class generatore: + + def caso(inizio, fine, stop): audio = pyaudio.PyAudio() input = audio.open(**opzioni) dati = input.read(opzioni["rate"]//opzioni["frames_per_buffer"] * stop//2) @@ -17,4 +39,6 @@ import math, random, itertools, pyaudio opzioni = { random.shuffle(dati) for i in range(stop): yield dati[i] - def onetimepad(l): return tuple(generatore.caso(0,2*16,l)) + + def onetimepad(l): + return tuple(generatore.caso(0,2*16,l)) diff --git a/crittografia/unicode.py b/crittografia/unicode.py index e1858c5..596262c 100644 --- a/crittografia/unicode.py +++ b/crittografia/unicode.py @@ -1,22 +1,77 @@ -from crittografia.numeri import * max = 2**(16) class codifica: +from crittografia.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 - def rot13(self): rotazione = str.maketrans( + + def rot13(self): + rotazione = str.maketrans( "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM" - ) return str.translate(self.stringa, rotazione) def vigenère(self, 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): cifrata = 1 sequenza = primi.lista(primo, len(self.stringa)) for i in range(len(self.stringa)): cifrata *= sequenza[i]**(ord(self.stringa[i]) + 1) return cifrata def vernam(self, pad=()): cifrata = "" + ) + return str.translate(self.stringa, rotazione) + + def vigenère(self, 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): + cifrata = 1 + sequenza = primi.lista(primo, len(self.stringa)) + for i in range(len(self.stringa)): + cifrata *= sequenza[i]**(ord(self.stringa[i]) + 1) + return cifrata + + def vernam(self, pad=()): + cifrata = "" if pad is (): - pad = generatore.onetimepad(len(self.stringa)) for i in range(len(self.stringa)): cifrata += chr((ord(self.stringa[i]) + pad[i]) % max) return cifrata, pad class decodifica: + pad = generatore.onetimepad(len(self.stringa)) + for i in range(len(self.stringa)): + cifrata += chr((ord(self.stringa[i]) + pad[i]) % max) + return cifrata, pad + +class decodifica: + def __init__(self, valore): valore = str(valore) if valore.isnumeric(): self.numero = int(valore) else: self.stringa = str(valore) - def rot13(self): rotazione = str.maketrans( + + def rot13(self): + rotazione = str.maketrans( "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - ) return str.translate(self.stringa, rotazione) def vigenère(self, 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): decifrata = "" for i in primi.lista(primo,n): lettera = -1 while self.numero % i == 0: self.numero /= i lettera += 1 decifrata += chr(lettera % max) return decifrata def vernam(self, pad): cifrata = "" for i in range(len(self.stringa)): cifrata += chr((ord(self.stringa[i]) - pad[i]) % max) return cifrata \ No newline at end of file + ) + return str.translate(self.stringa, rotazione) + + def vigenère(self, 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): + decifrata = "" + for i in primi.lista(primo,n): + lettera = -1 + while self.numero % i == 0: + self.numero /= i + lettera += 1 + decifrata += chr(lettera % max) + return decifrata + + def vernam(self, pad): + cifrata = "" + for i in range(len(self.stringa)): + cifrata += chr((ord(self.stringa[i]) - pad[i]) % max) + return cifrata